Version 3.3.8
(2 April 2015, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.8

    Features:
        N/A


    Changes:
        * Fix for the pipe_control.reset.reset() function when resetting the GUI in non-standard contexts.  This is mainly for debugging scripts when simulating a GUI and hence the GUI reset() method does not exist.
        * Created a GUI memory management debugging script for the align_tensor.init user function.  This repetitively calls the reset, pipe.create and align_tensor.init user functions, and opening the GUI element for setting alignment tensor elements (the Sequence window).  The pympler muppy_log file shows no memory leaks for these user functions on Linux systems.


    Bugfixes:
        * Resized all fixed-sized GUI wizards to fit on 1024x768 pixel wide displays.  The problem was reported by Lora Picton in the thread starting at http://thread.gmane.org/gmane.science.nmr.relax.user/1813.  Both the spin loading wizard of the spin viewer window and the relaxation data loading wizard used currently in the model-free analysis tab and BMRB export page were fixed.  These both had the y-dimension set to 800 pixels, hence parts of the window would be out of view.



Version 3.3.7
(13 March 2015, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.7

    Features:
        * Creation of the statistics.aic and statistics.model user functions for calculating and printing out different statistics.
        * Addition of new infrastructure for future support for plotting data using Veusz (http://home.gna.org/veusz/).
        * Huge speed up for the assembly of atomic coordinates from a large number of structures.
        * Sequence data in the internal structural object can now be sorted for better structural consistency.
        * The structure.read_pdb user function now skips water molecules, avoiding the creation of hundreds of new molecules when reading X-ray structures.
        * Conversion of the structure.mean user function to the new pipes/models/molecules/atom_id design and the addition of the set_mol_name and set_model_num arguments to allow the mean structure to be stored alongside the other molecules.
        * The monte_carlo.setup user function now raises a RelaxError if the number of simulations is less than 3, avoiding subsequent errors.
        * Expanded the functionality of the rdc.copy and pcs.copy user functions, allowing for the operation on two data pipes with different spin sequences, skipping deselected spins and interatomic data containers, printing out all copied data for better feedback, and copying all alignment metadata.
        * The sequence.attach_protons user function now lists all the newly created spins.
        * Clarification of the RDC and PCS Q factors with the printouts and XML file variable names modified to indicate if the normalisation is via the tensor size (2Da^2(4 + 3R)/5) or via the sum of data squared to allow for clearer RDC vs. PCS comparisons.
        * Expansion of the align_tensor.copy user function to allow all tensors to be copied between different data pipes.
        * Huge speed up for loading results and state files with Monte Carlo simulation alignment tensors.
        * Improvements for the rdc.weight and pcs.weight user functions.  The spin_id argument can now be set to None to allow all spins or interatomic data containers to be set.
        * Improvements for the pcs.structural_noise user function.  The check for the presence of PCS data for points to skip now includes checking for PCS values of None.  And the output Grace file now also includes the spin ID string as a string or comment value which can be displayed in the plot when desired.


    Changes:
        * Created the N_state_model.test_statistics system test.  This system test will be used to implement the new statistics user function class consisting of the structure.model and structure.aic user functions for calculating and storing the [chi2, n, k] parameters and Akaike's Information Criterion statistic respectively.
        * Added the structure.align user function to the renaming translation table.  This is so relax identifies structure.align user functions in scripts to raise an error saying that the structure.superimpose user function should be used instead.
        * Added the office-chart-pie set of Oxygen icons for use in the new statistics user function class.
        * Created the empty statistics user function class.  This adds the infrastructure for creating the statistics user functions.
        * Small fix for the structure.add_model user function description.
        * Created the frontend for the statistics.model user function.
        * Created a wizard graphic for the statistics user functions.  This is based on a number of Oxygen icons, as labelled in the SVG layer names.
        * The statistics.model user function now uses the new statistics wizard graphic.
        * Created the empty pipe_control.statistics module.  This will be used for the backend of all of the statistics user functions.
        * Fixes for the EPS versions of some Oxygen icons used in the relax manual.  This is the actions.document-preview-archive and actions.office-chart-pie Oxygen icons used for the user function icons.  The files were not created correctly in the Gimp.  The export to EPS requires the width and height to be both set to 6 mm, and the X and Y offsets to zero.  This allows the icon bounding boxes and sizes to match the other EPS icons.
        * Implemented the backend of the statistics.model user function.  The implementation heavily uses the specific analysis API, calling the calculate(), model_loop(), print_model_title(), model_statistics() and get_model_container() methods to do all of the work.  The last of these API methods is yet to be implemented.
        * Fix for the statistics.model user function backend.  The API methods are now called with the model_info argument set to a keyword argument so that it is always passed in as the correct argument.
        * Fix for the specific analysis API _print_model_title_global() common method.  This method was horribly broken, as it was never used.  The new statistics.model user function together with the N-state model uncovers this breakage.
        * Defined the get_model_container() specific analysis API method.  This base method raises a RelaxImplementError, therefore each analysis type must implement its own method (or use an API common method).
        * Implemented the specific analysis API _get_model_container_cdp() commmon method.  This is to be used for the get_model_container() for returning the current data pipe object as the model container.  This is for the global models where the model information is stored in the pipe object rather than in spin containers.
        * The N-state model now uses the _get_model_container_cdp() method.  This is aliased as the get_model_container() specific analysis API method.
        * Fix for the N_state_model.test_statistics system test - the probabilities were missing from k.
        * Expanded the printouts from the statistics.model user function to include the statistics.
        * Updated the N-state model num_data_points() function to use more modern integer incrementation.
        * Fix for the N_state_model.test_statistics system test.  The deselected spins and interatomic data containers are now taken into account for the RDC and PCS data point counts.
        * Implementation of the statistics.aic user function.  This is very similar to the statistics.model user function - the code was copied and only slightly modified.  The new user function will calculate the current chi-squared value per model, obtain the model statistics, calculate the AIC value per model, and store the AIC value, chi-squared value and number of parameters in the appropriate location for the model in the relax data store.
        * Created the empty lib.plotting.veusz module for graphing using Veusz (http://home.gna.org/veusz/).
        * Shifted the lib.software.grace module to lib.plotting.grace.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/7532 and http://thread.gmane.org/gmane.science.nmr.relax.devel/7536.
        * Created XY-data functions for the plotting API of the relax library.  These are currently copies of the heads of the lib.plotting.grace functions write_xy_data() and write_xy_header().  These lib.plotting.api functions (write_xy_data() and write_xy_header()) are set up to use the grace functions.
        * Converted all of the Grace plotting in relax to use the plotting API of the relax library.
        * Shifted the pipe_control.grace.write() function.  This is now the format independent pipe_control.plotting.write_xy() function.  The format argument has been added and this defaults to 'grace'.  The grace.write user function has been updated to use the new backend.
        * Updated the pcs.structural_noise user function to use the relax library plotting API.
        * Fixes for the new pipe_control.plotting.write_xy() function.  This includes missing imports which should have moved from pipe_control.grace, as well as shifting the axis_setup() function from the pipe_control.grace module into the pipe_control.plotting module.
        * The rdc.corr_plot user function backend now uses the relax library plotting API.  The write_xy_data() and write_xy_header() functions from lib.plotting.api are now uses instead of the equivalent pipe_control.grace functions which no longer exist.
        * More import fixes for the new pipe_control.plotting.write_xy() function.
        * Fix for the backend of the relax_disp.plot_disp_curves user function.  The lib.plotting.api functions write_xy_data() and write_xy_header() require the format argument.
        * Updated the relative stereochemistry auto-analysis to use the relax library plotting API.
        * Huge speed up for the assembly of atomic coordinates from a large number of structures.  The internal structural object validate_models() method was being called once for each structure when assembling the atomic coordinates.  This resulted in the _translate() internal structural object method, which converts all input data to formatted strings, being called hundreds of millions of times.  The problem was in lib.structure.internal.coordinates.assemble_atomic_coordinates(), in that the one_letter_codes() method, which calls validate_models(), was called for each molecule encountered.  The solution was not to validate models in one_letter_codes().
        * Huge speed up of the internal structural object validate_models() method.  The string formatting to create pseudo-PDB records and the large number of calls to the _translate() method for atomic information string formatting has been shifted to only be called when atomic information does not match.  Instead the structural information is directly compared within a large if-else statement.
        * Created the Structure.test_atomic_fluctuations_no_match system test.  This demonstrates a failure in the operation of the structure.atomic_fluctuations user function when the supplied atom ID matches no atoms.
        * Fix for the Structure.test_atomic_fluctuations_no_match system test.  The structure.atomic_fluctuations user function will now raise a RelaxError when no data corresponding to the atom ID can be found, so the test now checks for this.
        * Created the unit test infrastructure for the lib.structure.internal.object module.
        * Created the Test_object.test_add_atom_sort unit test.  This is from the _lib._structure._internal.test_object unit test module.  The test will be used to implement the sorting of input data by residue number in the add_atom() internal structural object method.  This will mean that added atoms will be placed in residue sequence order, so that output PDB files are correctly ordered.
        * Implementation of methods for sorting sequence data in the internal structural object.  The information is sorted in the molecule container level using the new MolContainer._sort() private method.  This uses the _sort_key() helper method which determines what the new order should be.  This is used as the 'key' argument for the Python sort() method.  Instead of list shuffling, new lists in the correct order are created.  Although not memory efficient, this might be faster than shuffling.
        * The loading of structural data now sorts the data if the merge flag is True.  The pack_structs() method for sorting the data will now call the new MolContainer._sort() function is the data is being merged.  This is to ensure that the final structural data is correctly ordered.
        * Fixes for a number of Structure system tests for the sorted structural data changes.
        * Modified the structure.read_pdb user function backend to skip water molecules.  All residues with the name 'HOH' are now skipped when loading PDB files.  This is implemented in the MolContainer.fill_object_from_pdb() method, and a RelaxWarning is printed listing the residue numbers of all skipped waters.
        * Modified the Structure.test_read_pdb_1UBQ system test for the new water skipping feature.  As the structure.read_pdb user function will now skip waters, the last atom in the structural object will now be the last ubiquitin atom and not the last water atom.
        * Modified the Test_object.test_add_atom_sort unit test to check atom connectivities.  This is from the _lib._structure._internal.test_object unit test module.  The problem is that the MolContainer._sort() method for sorting the structural data currently does not correctly update the bonded data structure.
        * Completed the implementation of the sorting of structural data in the internal structural object.  The MolContainer._sort() private method now changes the connect atom indices in the bonded data structure to the new sorted indices.
        * Created new system tests for implementing new functionality for the structure.mean user function.  This includes the Structure.test_mean_models and Structure.test_mean_molecules.  The idea is to convert the user function to the new pipes/models/molecules/atom_id design.  This will allow molecules with non-identical sequences and atomic compositions to be averaged.  The set_mol_name and set_model_num arguments from the structure.read_pdb, structure.read_gaussian, and structure.read_xyz user functions will also be implemented to allow the mean structure to be stored alongside the other molecules.
        * Some fixes for the checks in the Structure.test_mean_molecules system test.
        * Fix for the structure.mean user function call in the Structure.test_mean_models system test.
        * Expanded the checking in all the Structure.test_mean* system tests to cover all atomic information.  This includes the Structure.test_mean, Structure.test_mean_models, and Structure.test_mean_molecules system tests.  All structural data is now carefully checked to make sure that the structure.mean user function operates correctly.
        * Converted the structure.mean user function to the new pipe/model/molecule/atom_id design.  This allows the average structure calculation to work on atomic coordinates from different data pipes, different structural models, and different molecules.  The user function backend uses the new pipe_control.structure.main.assemble_structural_coordinates() function to assemble the common atom coordinates, molecule names, residue names, residue numbers, atom names and elements.  All this information is then used to construct a new molecule container for storing the average structure in the internal structural object.  To allow for the averaged structural data to be stored, the internal structural object method add_coordinates() has been created.  This is modelled on the PDB, Gaussian, and XYZ format loading methods.  The internal structural object mean() method is no longer used, but remains for anyone who might have interest in the future (though as it is untested, bit-rot will be a problem).
        * Small correction for the structure.read_pdb user function description.
        * Created the Structure.test_read_merge_simultaneous system test.  This is to demonstrate a failure in the structure.read_pdb user function when merging multiple molecules from one file into one molecule simultaneously with a single user function call.
        * Added some error checking for the monte_carlo.setup user function.  A RelaxError is now raised if the number of simulations is less than 3.  This prevents Python errors when later calling the monte_carlo.error_analysis user function.
        * Test suite fixes for the error checking in the monte_carlo.setup user function.  The number of simulations has been increased from either 1 or 2 in all tests to the minimal number of simulations (3).
        * Created the Structure.test_bug_23293_missing_hetatm system test.  This is to catch bug #23293 (https://gna.org/bugs/?23293), the PDB HETATM loading error whereby the last HETATM record is sometimes not read from the PDB file.
        * Small fix for the chain IDs in the Structure.test_bug_23293_missing_hetatm system test.
        * Created the Structure.test_multi_model_and_multi_molecule system test.  This is used to check the loading and writing of a multi-model and multi-molecule PDB file.  The test shows that this functions correctly.
        * Modified the Structure.test_multi_model_and_multi_molecule test to check for model consistency.  This is just for better test suite coverage of the handling of PDB structural data.
        * Created the Structure.test_bug_23294_multi_mol_automerge system test.  This is used to catch bug #2329 (https://gna.org/bugs/?23294), the automatic merging of PDB molecules resulting in an IndexError.  It reads in the 'in.pdb' PDB file attached to the bug report, now named 'bug_23294_multi_mol_automerge.pdb', to show the IndexError.  The test also checks the structure.write_pdb user function to make sure that the output PDB file contains a single merged molecule.
        * Added the PDB file to the repository for the Structure.test_bug_23294_multi_mol_automerge system test.
        * Fix for the Structure.test_bug_23294_multi_mol_automerge system test.  The MASTER PDB record has been added to the data to check for, as this will be produced by the structure.write_pdb user function.
        * Improved the RelaxWarning for missing atom numbers in the PDB CONECT records.  This is for the structure.read_pdb user function.  Now only one warning is given for the entire PDB file listing all of the missing atom numbers rather than one warning per missing atom.  This can significantly compact the warnings, removing a lot of repetition.
        * Improved the quality of the printouts from the structure.read_pdb user function.  This also affects the structure.read_gaussian and structure.read_xyz user functions.  The messages about adding new molecules or merging with existing molecules has been significantly improved.  The text with the model information is now only printed if the model number is present in the PDB file or has been supplied by the user.
        * Fixes for all of the PDB documentation HTML links in the docstrings.  The PDB have shifted their documentation from http://www.wwpdb.org/documentation/format33/v3.3.html to http://www.wwpdb.org/documentation/file-format/format33/v3.3.html, stupidly without redirects.  This will create dead links in the relax API documentation at http://www.nmr-relax.com/api/3.3/, as well as the older API documentation (http://www.nmr-relax.com/api/2.2/, http://www.nmr-relax.com/api/3.0/, http://www.nmr-relax.com/api/3.1/, http://www.nmr-relax.com/api/3.2/).
        * Created the Structure.test_bug_23295_ss_metadata_merge system test.  This is to catch bug #23295 (https://gna.org/bugs/?23295), the PDB secondary structure HELIX and SHEET records not updated when merging molecules.  This uses the '2BE6_secondary_structure.pdb' structure file and 'test.py' relax script contents as the test, checking the HELIX and SHEET records.
        * Added one more check to the Structure.test_bug_23295_ss_metadata_merge system test.  The test would pass if no HELIX or SHEET records were to be written to the PDB file.
        * Fix for the Structure.test_bug_23295_ss_metadata_merge system test and additional printouts.
        * Fix for the Structure.test_pdb_combined_secondary_structure system test.  The SHEET PDB record check was incorrect and was checking for the improperly formatted atom name field, which has now been fixed in relax.
        * Large speed up of the structure.web_of_motion user function.  With the introduction of the _sort() internal structural object method and it being called by the add_atom(), the structure.web_of_motion user function was now painfully slow.  As sorting the structural data is unnecessary for the backend of this user function, the add_atom() boolean argument 'sort' has been added to turn the sorting on and off, and the structure.web_of_motion backend now sets this to False.
        * Fix for the internal structural object unit test Test_object.test_add_atom_sort.  This test of the _lib._structure._internal.test_object unit test module now requires the sort argument set to True when calling the add_atom() method.
        * Improvement for a RelaxError message when assembling structural data but no coordinates can be found.
        * Created a series of unit tests for implementing a new internal structural object feature.  These tests check a new 'inv' argument for the selection() structural object method for allowing all atoms not matching the atom ID string to be selected.
        * Implemented the new 'inv' argument for the selection() structural object method.  This allows for all atoms not matching the atom ID string to be selected.  The unit tests for this argument now all pass, validating the implementation.
        * Improvement for the structure.mean user function.  This can now be used to store an averaged structure in an empty data pipe.  Previously structural data needed to be present in the current data pipe for the user function to work.
        * Created a system test to show a limitation of the rdc.copy user function.  Currently, it cannot work when spin systems in two data pipes are different.  The system test will be used to implement the support.
        * Simplification of the new Rdc.test_rdc_copy_different_spins system test.  This no longer tests the deletion of interatomic data containers by the spin.delete user function, something which is not implemented.
        * Some more fixes for the Rdc.test_rdc_copy_different_spins system test.  The residue.delete and not spin.delete user function is required to delete the sequence data.
        * Another small fix for the new Rdc.test_rdc_copy_different_spins system test.  The rdc.copy user function requires the pipe_to argument to be supplied in this case.
        * Expansion of the Rdc.test_rdc_copy_different_spins system test.  The interatomic data containers are now defined via the interatom.define user function, which requires the spin.element user function to set up the element information.  A printout has also been added to demonstrate a failure in the pipe_control.interatomic.interatomic_loop() function in handling the correct data pipe.
        * Some more modifications for the Rdc.test_rdc_copy_different_spins system test.  One of the interatomic data containers does not have RDC data, as it is not present in the original data pipe, hence this is checked for.  And the printouts have more formatting.
        * Expanded the functionality of the rdc.copy user function.  The user function will now operate on two data pipes with different spin sequences.  If the interatomic data container is missing from the target data pipe, a warning is given.  And if the interatomic data container is not present in the source data pipe, nothing will be copied.
        * Modified the rdc.copy user function to printout all copied RDC values and errors.
        * Created the Rdc.test_rdc_copy_back_calc system test.  This will be used to implement the back_calc Boolean argument for the rdc.copy user function to allow not only measured, but also back-calculated RDC values to be copied.
        * Modified the rdc.copy printout of RDCs to occur for each alignment ID.
        * Implemented the back_calc argument for the rdc.copy user function.  This allows the back-calculated RDCs to be additionally copied together with the real value and error.
        * Small formatting change for the rdc.copy user function printouts.
        * Created the Pcs.test_pcs_copy_different_spins system test.  This will be used to show a limitation of the pcs.copy user function in that it cannot copy data between two data pipes with different molecule, residue, and spin sequences.
        * Added a printout of the alignment ID for the pcs.copy user function.  This is to match the rdc.copy user function.
        * Created the Pcs.test_pcs_copy_back_calc system test.  This will be used to implement the back_calc Boolean argument for the pcs.copy user function to allow not only measured, but also back-calculated PCS values to be copied.  It matches the equivalent Rdc.test_rdc_copy_back_calc system test.
        * Implemented the back_calc argument for the pcs.copy user function.  This allows the back-calculated PCSs to be additionally copied together with the real value and error.  The implementation simply copies that of the rdc.copy user function.
        * Added full per-alignment data printouts to the pcs.copy user function to match rdc.copy.  The feedback is important to know what was actually copied.
        * Modified the pcs.copy user function to handle different spin sequence between data pipes.
        * Fixes for the Pcs.test_pcs_copy_different_spins and Pcs.test_pcs_copy_back_calc system tests.
        * Fix for the pcs.copy user function for a recently introduced problem.  The data pipe for the spin_loop() function must be supplied.
        * The pcs.copy user function now skips deselected spins.
        * Modified the N_state_model.test_data_copying system test to skip deselected spins.
        * Added more checks to the three Pcs.test_pcs_copy* system tests.
        * Added more checks to the three Rdc.test_rdc_copy* system tests.
        * Created the Rdc.test_calc_q_factors_no_tensor system test.  This is to demonstrate a failure in the rdc.calc_q_factors user function when no alignment tensor is present.  In addition, the test is also triggering an earlier problem of spin isotope information being missing.  However the isotope is not required if the tensor is absent.
        * The Rdc.test_rdc_copy_* system tests now check for the 'rdc_data_types' data structure.  This is in the Rdc.test_rdc_copy_different_spins and Rdc.test_rdc_copy_back_calc system tests and shows that the rdc.copy user function fails to duplicate this information.
        * The Rdc.test_rdc_copy_* system tests now check for the 'absolute_rdc' data structure.  This is in the Rdc.test_rdc_copy_different_spins and Rdc.test_rdc_copy_back_calc system tests and shows that the rdc.copy user function fails to duplicate this information as well.
        * Expanded the rdc.copy user function to copy the RDC data type and absolute RDC flag information.
        * Created the Rdc.test_corr_plot system test to check the rdc.corr_plot user function.  This shows that this poorly tested function works correctly.
        * Created the Pcs.test_corr_plot system test to check the pcs.corr_plot user function.  This user function is poorly tested, and this test triggers a series of bugs.
        * Added the 'title' and 'subtitle' arguments to the pcs.corr_plot user function.  This problem was detected by the new Pcs.test_corr_plot system test.  The pcs.corr_plot user function now matches the rdc.corr_plot user function in terms of arguments.
        * Completed the Pcs.test_corr_plot system test.  The file contents are now known and have been carefully checking in Grace.
        * Clarification of the RDC and PCS Q factors.  This affects the rdc.calc_q_factors and pcs.calc_q_factors user functions, as well as all other operations involving the calculation of Q factors.  The printouts have been modified to clarify if the normalisation is via the tensor size (2Da^2(4 + 3R)/5) or via the sum of data squared, and the separation of the two is now clearer.  This allows for better RDC vs. PCS comparisons.  In addition, the data pipe variable names have been updated to reflect the normalisation, so it is instantly known when looking at the XML contents of results or save files which was used.  The backwards compatibility hooks have been modified to support the data pipe variable name changes.
        * The align_tensor.copy user function 'tensor_from' argument can now be None.  This is to enable the copying of all alignment tensors from one data pipe to another.
        * Created the Align_tensor.test_copy_pipes system test.  This is to show a problem in the align_tensor.copy user function when copying all tensors between data pipes.
        * Modified the pipe_control.align_tensor.align_data_exists() function to handle no tensor IDs.  If no tensor ID is supplied, this will then return True if any alignment data exists.
        * Improvement for the align_tensor.copy user function.  The user function has been modified to allow all alignment tensors to be copied between two data pipes.  This allows the Align_tensor.test_copy_pipes system test to pass.
        * Fixes for the align_tensor.copy user function argument unit tests.  The tensor_from and tensor_to arguments can now be None.
        * Created the Align_tensor.test_copy_pipes_sims system test.  This demonstrates a failure of the align_tensor.copy user function when Monte Carlo simulated tensors are present.
        * Deleted the data_store.align_tensor.AlignTensorSimList.append() method.  This replacement list method was proving fatal when copy.deepcopy() is called on the alignment tensor object.  The change allows the Align_tensor.test_copy_pipes_sims system test to pass.
        * Huge speed up for loading results and state files with Monte Carlo simulation alignment tensors.  The reading of the alignment tensor component of XML formatted results and state files has been modified.  Previously the data_store.align_tensor.AlignTensorData._update_object() method for updating the alignment tensor object (for values, errors, simulations) was being called once for each Monte Carlo simulation.  Now is it called only once for all simulations.  In one test, the reading of the save file with 500 simulations dropped from 253.7 to 10.0 seconds.
        * Added an extra check for the assembly of RDC data.  This is in the pipe_control.rdc.return_rdc_data() function and the check is for any unit vectors set to None, which is a fatal condition.
        * Improved the RelaxError message from the RDC assembly function when unit vectors are None.
        * Added a new warning to the interatom.unit_vectors user function if data is missing.  This is to aid in detecting problems earlier before unit vectors of None are encountered by other parts of relax.
        * Modified the rdc.corr_plot user function to skip deselected interatomic data containers.  This would normally happen as no back-calculated data is normally present.  However, if data has been copied from elsewhere, this may not always be the case.
        * Created the Sequence.test_bug_23372_read_csv system test.  This is to catch bug #23372 (https://gna.org/bugs/?23372), the sequence.read failure with CSV files.  It uses a truncated version of the CSV data file attached to sr #3219 (https://gna.org/support/?3219).
        * Converted the lib.sequence.validate_sequence() to the checking function design.  This is the checking function design documented at http://wiki.nmr-relax.com/Relax_source_design#The_check_.2A.28.29_functions.  The validate_sequence() function has been renamed to check_sequence_func() and the checking object is called check_sequence.  It removes the string processing hack to convert RelaxErrors to RelaxWarnings in the lib.sequence.read_spin_data() function, avoiding strange messages such at "RelaxWarning: ror: The sequence data in the line..." as seen in the Sequence.test_bug_23372_read_csv system test.
        * Small typo fix for the Sequence.test_bug_23372_read_csv system test.
        * Added the raise_flag argument to the lib.sequence.read_spin_data() function.  This is to allow the missing data RelaxError to be deactivated.
        * Modified the spectrum.read_intensities user function backend to be more robust.  This affects the generic formatted peak lists, via the lib.spectrum.peak_list.intensity_generic() function.  The peak list reading will now continue reading the file after corrupted lines have been encountered.
        * Python 3 improvement for the rdc.corr_plot and pcs.corr_plot user functions.  The world view is now set in floating point numbers.  In Python 2, the math.ceil() and math.floor() functions return floats, whereas in Python 3 these functions return integers.  The behaviour is now consistent in both Python versions, fixing a few system tests.
        * Modified the internal formatting of the data section of the Grace 2D graph files.  This affects the lib.plotting.grace.write_xy_data() function.  The formatting is now more consistent, with the X value now set to a fixed number of decimal places, and hence will no longer change between Python 2 and 3.  The data is now all right justified as well, for easier reading.  All affected system tests have been updated for the new format.
        * Epydoc documentation fix for the lib.structure.pdb_write_handle_atom_name() function.


    Bugfixes:
        * Big bug fix for the N-state model num_data_points() function.  This is from the specific_analyses.n_state_model.data module.  This code was very much out of date.  It was expecting an ancient behaviour where the spin container 'pcs' variable and interatomic data container 'rdc' where lists of floats.  However these were converted many years ago to dictionaries with keys set to the alignment IDs.  The result was that no RDCs nor PCSs were counted as a base data point, so the function would in most cases return a value of zero.
        * Fixes for the printout from the pipe_control.pcs.return_pcs_data() function.  The number of PCSs printed out was including values of None when data was missing for one alignment.  These values of None are no longer counted.
        * Fixes for the printout from the pipe_control.rdc.return_rdc_data() function.  The number of RDCs printed out was including values of None when data was missing for one alignment.  These values of None are no longer counted.
        * More fixes for the RDC and PCS count printouts from the corresponding data assembly functions.  Sometimes the RDC or PCS value could be present as None.  This is now detected and the count is not incremented.
        * More fixes for the PCS count printout from the pipe_control.pcs.return_pcs_data() function.  The check for None values was incorrect.
        * Fixes for the N-state model num_data_points() function.  The deselected interatomic data containers are no longer used for counting RDC data.  And the skipping of deselected spin containers for the PCS is now via the spin_loop() skip_desel argument.
        * Fix for bug #23259 (https://gna.org/bugs/?23259).  This is the broken user functions in the prompt UI with the RelaxError: The user function 'X' has been renamed to 'Y'.  The problem was that the only the first part of the user function name, for example 'minimise' from 'minimise.calculate' was being checked in the user function name translation table.  As the minimise user function has been renamed to minimise.execute, 'minimise' is in the translation table and hence minimise.calculate was being identified as the minimise user function.  Now the full user function name is reconstructed before checking the translation table.
        * Fixes for the lib.structure.internal.coordinates.assemble_coord_array() function.  The problem was uncovered by the Structure.test_atomic_fluctuations_no_match system test.  The function can now handle no data being passed in.
        * Fixes for the pipe_control.structure.main.assemble_structural_coordinates() function.  The function will now raise a RelaxError if no structural data matching the atom ID can be found.  The problem was uncovered by the Structure.test_atomic_fluctuations_no_match system test.  The fix affects the structure.atomic_fluctuations, structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose, and structure.web_of_motion user functions.
        * Fix for bug #23265 (https://gna.org/bugs/?23265).  This is the failure of the edit buttons in the user function GUI windows.  The problem was that the column titles of the window opened by the edit button were being incorrectly handled if the dimensions of the window were not supplied.
        * Fix for bug #23288 (https://gna.org/bugs/?23288).  This is the failure of the structure.read_pdb user function when simultaneously merging multiple molecules from one file.  The set_mol_name and set_model_num arguments are now converted to lists equal to the length of the read_mol and read_model arguments simultaneously, if supplied.
        * Small fix for the structure.write_pdb user function for handling old relax state and results files.
        * Fix for bug #23293 (https://gna.org/bugs/?23293).  This is the PDB HETATM loading error whereby the last HETATM record is sometimes not read from the PDB file.  The problem was two-fold.  Firstly the internal structural object _parse_mols_pdb() method for separating a PDB file into distinct molecules was terminating too early when a new molecule is found, so that the last PDB record is not appended to the records list for the molecule.  Secondly the write_pdb() method was not handling the PDB sequential serial number correctly.
        * Fix for bug #23294 (https://gna.org/bugs/?23294).  This is the automatic merging of PDB molecules resulting in an IndexError.  Now if only a single molecule name is supplied, this will be used for all molecules in the PDB file.  The result is that the structural data will all be automatically merged into a single molecule.  This merging is communicated to the user via the current printouts.
        * Bug fix for the SHEET PDB records created by the structure.write_pdb user function.  The current and previous atom parts of the record were not being correctly formatted.  This was simply using the %4s formatting string.  However the PDB atom format is rather more complicated.  To handle this, the new _handle_atom_name() helper function has been added to the lib.structure.pdb_write module.  This is now used in the atom() and sheet() functions for consistently formatting the atom name field.
        * Fix for bug #23295 (https://gna.org/bugs/?23295).  This is the PDB secondary structure HELIX and SHEET records not updating when merging molecules.  The problem was that the algorithm for changing the molecule numbers for the helix and sheet metadata when calling the structure.read_pdb user function was far too simplistic.  Therefore the logic has been completely rewritten.  Now the helix and sheet metadata are stored in temporary data structures in the _parse_pdb_ss() method.  As the molecules are being read from the PDB records, new data structures containing the original molecule numbers and new molecule numbers are created.  The helix and sheet metadata is then stored in the internal structural object via the pack_structs() method, and the molecule indices of the metadata changed based on the two molecule number remapping data structures.
        * Python 3 fix for the new internal structural object MolContainer._sort() method.  The list() builtin function is required to convert the output of the range() function into a true list in Python 3, so that the list.sort() method can be accessed.
        * Python 3 fix for the Test_msa.test_central_star unit test.  This is from the _lib._sequence_alignment.test_msa unit test module.  The logic of range() + range() does not work in Python 3, so the range function calls are now wrapped in list() function calls to convert to the correct data structure type.
        * Python 3 fix for the internal structural object MolContainer._sort_key() method.  This method is used as the key for the sort() function.  However in Python 3, the key cannot be None.  So now if the residue number is None, the value of 0 is returned instead.
        * Python 3 fix for the pipe_control.structure.main.assemble_structural_coordinates() function.  This affects most of the structure user functions.  This was another case of requiring the list() built in function to create a list object from an iterator.
        * Another Python 3 list() fix for the structure user functions.  This time the problem was in the pipe_control.structure.main.sequence_alignment() function.
        * Fix for a RelaxError message from the internal structural object when validating models.
        * Bug fix for the results.write user function when loading relax state files.  The results.write user function can load not only the results file consisting of a single data pipe, but also relax state files if only a single pipe is present.  However this was causing the current data pipe and other pipe-independent data (sequence alignments and the GUI) to be overwritten, just as when loading a state file.  Now only the data from the data pipe will be loaded and the pipe independent data in the state file will be ignored.
        * Fix for the rdc.write user function.  The check for the missing rdc_data_types variable in the interatomic containers is now more comprehensive and checks for the presence of the alignment ID.
        * Big bug fix for the pipe_control.interatomic.interatomic_loop() function.  This was identified in the Rdc.test_rdc_copy_different_spins system test.  The problem was that the pipe argument was being ignored when looking up the spin containers.  Hence if the pipe being worked on was not the current data pipe, and the spin sequences were not identical, the function would fail.  This mainly affects the rdc.copy user function.
        * Fix for the pcs.read user function.  The problem was caught by the new Pcs.test_pcs_copy_different_spins system test.  If the spin system does not exist in the current data pipe, but data for it is present in the PCS file, the pcs.read user function would terminate in a TypeError.
        * Fixes for the rdc.calc_q_factors user function for when no alignment tensor is present.  This was caught by the Rdc.test_calc_q_factors_no_tensor system test.  Now if no tensor is present, a warning is given and the 2Da^2(4 + 3R)/5 normalised Q factor is skipped.  Also, if present but no spin isotope information is present, then RelaxSpinTypeError errors are raised.
        * Fix for the pcs.corr_plot user function when the spin containers have no element information.
        * Fix for bug #23372 (https://gna.org/bugs/?23372), the sequence.read failure with CSV files.  The problem was that the sep argument was not being passed all the way to the backend lib.io.extract_data() function.
        * Fix for the lib.sequence.check_sequence checking object.  Although rarely used, the check for the spin number was incorrect and half of the checks were instead for the residue number.  This is a classic copy and paste error where the residue name and number checks were copied but not completely converted to spin name and numbers.



Version 3.3.6
(4 February 2015, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.6

    Features:
        * The Needleman-Wunsch sequence alignment algorithm now calculates an alignment score.
        * Implementation of the central star multiple sequence alignment (MSA) algorithm.
        * Implementation of a reside number based multiple sequence alignment (MSA) algorithm.
        * Large speed up of the molecule, residue, and spin selection object, affecting all parts of relax.
        * Sequence alignments are now saved in the relax data store.
        * Important formatting improvement for the description in the GUI user function windows, removing excess empty lines after lists.
        * Creation of the structure.sequence_alignment user function.  The MSA algorithm can be set to either 'Central Star' or 'residue number', the pairwise sequence alignment algorithm to 'NW70' for the Needleman-Wunsch algorithm, and the substitution matrix to one of 'BLOSUM62', 'PAM250', or 'NUC 4.4'.
        * More advanced support for different numpy number types in the lib.xml relax library module.  This allows numpy int16, int32, float32, and float64 objects to be saved in the relax data store and retrieved from relax XML save and results files.
        * Merger of structure.align into the structure.superimpose user function.
        * The assembly of common atomic coordinates by the structure user functions now takes sequence alignments into account.  The logic is to first use a sequence alignment from the relax data store if present, use no sequence alignment if coordinates only come from structural models, or fall back to a residue number based alignment.  This affects the structure.align, structure.atomic_fluctuations, structure.com, structure.displacement, structure.find_pivot, structure.mean, structure.rmsd, structure.superimpose and structure.web_of_motion user functions.
        * Large improvements in the memory management for all parts of the GUI.


    Changes:
        * Spelling fixes for the CHANGES document.
        * Created the Structure.test_align_molecules2 system test.  This is to demonstrate a failure condition in the structure.align user function.
        * Large simplification of the atomic coordinate assembly code in the internal structural object.  This is in the lib.structure.internal.coordinates.assemble_coord_array() function.  The logic of the function has recently changed due to the introduction of the pairwise sequence alignments.  This caused a lot of code to now be redundant, and also incorrect in certain cases.  This simplification fixes the problem caught by the Structure.test_align_molecules2 system test.
        * Fix for the Structure.test_displacement system test - the molecule IDs needed updating.
        * Created the Structure.test_align_molecules_end_truncation system test.  This is to demonstrate a failure of the common residue detection algorithm using multiple pairwise alignments in the backend of the structure.align and other multiple structure based user functions.
        * Created empty unit test infrastructure for testing the lib.structure.internal.coordinates module.
        * Created the Test_coordinates.test_common_residues unit test.  This is from the _lib._structure._internal.test_coordinates unit test module.  The test shows that the lib.structure.internal.coordinates.common_residues() function is working correctly.  However the printout, which is not caught by the test, is incorrect.
        * Modified the lib.structure.internal.coordinates.common_residues() function.  It now accepts the seq argument which will caused the gapped sequence strings to be returned.  This is to allow for checking in the unit tests.
        * Created the Test_align_protein.test_align_multiple_from_pairwise unit test.  This is in the _lib._sequence_alignment.test_align_protein unit test module.  This test checks the operation of the lib.sequence_alignment.align_protein.align_multiple_from_pairwise() function, which does not yet exist.
        * Simplified the Test_coordinates.test_common_residues unit test by removing many residues.  This is from the _lib._structure._internal.test_coordinates unit test module.
        * Expanded the docstring of the Test_align_protein.test_align_multiple_from_pairwise unit test.  This is from the _lib._sequence_alignment.test_align_protein unit test module.
        * Attempt at fixing the lib.structure.internal.coordinates.common_residues() function.  This function still does not work correctly.
        * Renamed the Test_align_protein.test_align_multiple_from_pairwise unit test.  This is now the Test_msa.test_central_star unit test of the _lib._sequence_alignment.test_msa unit test module (it was originally in the _lib._sequence_alignment.test_align_protein unit test module).  This is in preparation for converting the lib.sequence_alignment.align_protein.align_multiple_from_pairwise() function into the lib.sequence_alignment.msa.central_star() function.
        * Added the lib.sequence_alignment.align_protein.align_multiple_from_pairwise() function.  This should have been committed earlier.  The function is only partly implemented.
        * Initial lib.sequence_alignment.msa.central_star() function.  This was moved from lib.sequence_alignment.align_protein.align_multiple_from_pairwise().
        * Import fix for the _lib._sequence_alignment.test_align_protein unit test module.
        * Added the verbosity argument to lib.sequence_alignment.align_protein.align_pairwise().  If set to zero, all printouts are suppressed.
        * The Needleman-Wunsch sequence alignment algorithm now calculates and returns an alignment score.  This is in the lib.sequence_alignment.needleman_wunsch.needleman_wunsch_align() function.  The score is calculated as the sum of the Needleman-Wunsch matrix elements along the traceback path.
        * The protein pairwise sequence alignment function now returns the alignment score.  This is in the lib.sequence_alignment.align_protein.align_pairwise() function.  The score from the Needleman-Wunsch sequence alignment algorithm is simply passed along.
        * Fix for the Test_msa.test_central_star unit test.  This is from the _lib._sequence_alignment.test_msa unit test module.  Some of the real gap matrix indices were incorrect.
        * Complete implementation of the central star multiple sequence alignment algorithm.  This includes all the four major steps - pairwise alignment between all sequence pairs, finding the central sequence, iteratively aligning the sequences to the gapped central sequence, and introducing gaps in previous alignments during the iterative alignment.  The correctness of the implementation is verified by the Test_msa.test_central_star unit test of the _lib._sequence_alignment.test_msa module.
        * Fixes for the unit tests of the _lib._sequence_alignment.test_align_protein module.  The Test_align_protein.test_align_pairwise_PAM250 unit test was accidentally duplicated due to a copy and paste error.  And the lib.sequence_alignment.align_protein.align_pairwise() function now also returns the alignment score.
        * Fixes for the unit tests of the _lib._sequence_alignment.test_needleman_wunsch module.  The lib.sequence_alignment.needleman_wunsch.needleman_wunsch_align() function now returns the alignment score.
        * The assemble_coord_array() function is now using the central star multiple sequence alignment.  This is the function from the lib.structure.internal.coordinates module used to assemble common atomic coordinate information, used by the structure.align, structure.atomic_fluctuations, structure.com, structure.displacement, structure.find_pivot, structure.mean, structure.rmsd, structure.superimpose and structure.web_of_motion user functions.  The non-functional lib.structure.internal.coordinates.common_residues() function has been removed as the lib.sequence_alignment.msa.central_star() function performs this functionality correctly.
        * Deleted the Test_coordinates.test_common_residues unit test.  This is from the _lib._structure._internal.test_coordinates unit test module.  The lib.structure.internal.coordinates.common_residues() function no longer exists.
        * Alphabetical ordering of all Structure system tests.
        * Better printout spacing in lib.sequence_alignment.msa.central_star().
        * Fixes for the Structure.test_align_molecules_end_truncation system test.  This system test had only been partly converted from the old Structure.test_align_molecules2 system test it had been copied from.
        * Created the Internal_selection.count_atoms() internal structural object selection method.  This counts the number of atoms in the current selection.
        * Added final printouts to the structure.rotate and structure.translate user function backends.  This is to give feedback to the user as to how many atoms were translated or rotated, to aid in solving problems with the structure user functions.  These backend functions are also used by the structure.align and structure.superimpose user functions.
        * Corrections for the Structure.test_align_CaM_BLOSUM62 system test.  The CaM N and C domains can not be aligned together in a global MSA as they would align very well to themselves, causing the atomic coordinate assembly function to fail.
        * Improvement for the lib.sequence_alignment.msa.central_star() function.  The strings and gap matrix returned by the function have been reordered to match the input sequences.
        * Modified the Structure.test_align_molecules_end_truncation system test.  The calmodulin bound calciums are now deleted prior to the structure.align user function call.  This prevents these being labelled as '*' residues and aligning with real amino acids via the central star multiple sequence alignment (MSA) algorithm.
        * Large speed up of the mol-res-spin selection object.  The Selection.contains_mol(), Selection.contains_res() and Selection.contains_spin() methods of the lib.selection module have been redesigned for speed.  Instead of setting a number of flags and performing bit operations at the end of the method to return the correct Boolean value, each of the multiple checks now simply returns a Boolean value, avoiding all subsequent checks.  The check list order has also been rearranged so that the least expensive checks are to the top and the most time intensive checks are last.
        * Created the new relax data store object for saving sequence alignments.  This is in the new data_store.seq_align module via the Sequence_alignments object, subclassed from RelaxListType, for holding all alignments and the Alignment Element object, subclassed from Element, for holding each individual alignment.  The objects are currently unused.
        * Added the seq_align module to the data_store package __all__ list.
        * Created the Test_seq_align.test_alignment_addition unit test.  This is in the _data_store.test_seq_align unit test module.  This tests the setup of the sequence alignment object via the data_store.seq_align.Sequence_alignment.add() method.
        * Fixes for the data_store.seq_align.Alignment.generate_id() method.  These problems were identified by the _data_store.test_seq_align module Test_seq_align.test_alignment_addition unit test.
        * Added the Test_seq_align.test_find_alignment and Test_seq_align.test_find_missing_alignment unit tests.  These are in the _data_store.test_seq_align unit test module.  They check the functionality of the currently unimplemented Sequence_alignment.find_alignment() method which will be used to return pre-existing alignments.
        * Code rearrangement in the _data_store.test_seq_align unit test module.  The ID generation has been shifted into the generate_ids() method to be used by multiple tests.
        * Implemented the data_store.seq_align.Sequence_alignments.find_alignment() method.  This will only return an alignment if all alignment input data and alignment settings match exactly.
        * Shifted the data_store.seq_align.Alignment.generate_id() method into the relax library.  It has been converted into the lib.structure.internal.coordinates.generate_id() function to allow for greater reuse.
        * Created the Sequence.test_align_molecules system test.  This will be used to implement the sequence.align user function which will be used for performing sequence alignments on structural data within the relax data store and storing the data in the data pipe independent sequence_alignments data store object (which will be an instance of data_store.seq_align.Sequence_alignments).  The system test also checks the XML saving and loading of the ds.sequence_alignments data structure.
        * Renamed the Sequence.test_align_molecules system test to Structure.test_sequence_alignment_molecules.  As the sequence alignment is dependent on the structural data in the relax data store, the user function for sequence alignment would be better named as structure.sequence_alignment.  The sequence.align user function is not appropriate as all other sequence user functions relate to the molecule, residue, and spin data structure of each data pipe rather than to the structural data.
        * Modified the Structure.test_sequence_alignment_molecules system test.  Changed and expanded the arguments to the yet to be implemented structure.sequence_alignment user function.
        * Important formatting improvement for the description in the GUI user function windows.  Previously lists, item lists, and prompt items were spaced with one empty line at the top and two at the bottom.  The two empty lines at the bottom was an accident caused by how the list text elements were built up.  Now the final newline character is stripped so that the top and bottom of the lists only consist of one empty line.  The change can give a lot more room in the GUI window.
        * Created the frontend for the structure.sequence_alignment user function.  This is based on the structure.align user function with the 3D superimposition arguments removed and new arguments added for selecting the MSA algorithm and the pairwise alignment algorithm (despite only NW70 being currently implemented).
        * Modified the assemble_coordinates() function of the pipe_control.structure.main module.  The function has been renamed to assemble_structural_objects().  The call to the lib.structure.internal.coordinates.assemble_coord_array() function has also been shifted out of assemble_structural_objects() to simplify the logic and decrease the amount of arguments passed around.
        * Spun out the atomic assembly code of the assemble_coord_array() function.  The code from the lib.structure.internal.coordinates.assemble_coord_array() function has been shifted to the new assemble_atomic_coordinates().  This is to simplify assemble_coord_array() as well as to isolate the individual functionality for reuse.
        * Implemented the backend of the structure.sequence_alignment user function.  This checks some of the input parameters, assembles the structural objects then the atomic coordinate information, performs the multiple sequence alignment, and then stores the results.
        * Fixes for the sequence alignment objects for the relax data store.  The Sequence_alignments(RelaxListType) and Alignment(Element) classes were not being set up correctly.  The container names and descriptions were missing.
        * The data store ds.sequence_alignment object is now being treated as special and is blacklisted.  The object is now explicitly recreated in the data store from_xml() method.
        * Fixes for handling the sequence_alignments data store object.
        * Implemented the data store Sequence_alignments.from_xml() method.  This method is required for being able to read RelaxListType objects from the XML file.
        * Modified the data returned by lib.structure.internal.coordinates.assemble_atomic_coordinates().  The function will now assemble simple lists of object IDs, model numbers and molecule names with each list element corresponding to a different structural model.  This will be very useful for converting from the complicated pipes, models, and molecules user function arguments into relax data store independent flat lists.
        * Updates for the structure.sequence_alignment user function.  This is for the changes to the lib.structure.internal.coordinates.assemble_atomic_coordinates() function return values.  The new object ID, model, and molecule flat lists are used directly for storing the alignment results in the relax data store.
        * Updates for the Structure.test_sequence_alignment_molecules system test.  This is required due to the changes in the backend of the structure.sequence_alignment user function.
        * Merger of the structure.align and structure.superimpose user functions.  The final user function is called structure.superimpose.  As the sequence alignment component of the structure.align user function has been shifted into the new structure.sequence_alignment user function and the information is now stored in ds.sequence_alignments relax data store object, the functionality of structure.align and structure.superimpose are now essentially the same.  The sequence alignment arguments and documentation has also been eliminated.  And the documentation has been updated to say that sequence alignments from structure.sequence_alignment will be used for superimposing the structures.
        * Updated the Structure system tests for the structure.align and structure.superimpose user function merger.
        * Fix for the structure.sequence_alignment user function.  The alignment data should be stored in ds.sequence_alignments rather than ds.sequence_alignment.
        * Sequence alignments can now be retrieved without supplying the algorithm settings.  This is in the data_store.seq_align.Sequence_alignments.find_alignment() method.  The change allows for the retrieval of pre-existing sequence alignments at any stage.
        * Added a function for assemble the common atomic coordinates taking sequence alignments into account.  This is the new pipe_control.structure.main.assemble_structural_coordinates() function.  It takes the sequence alignment logic out of the lib.structure.internal.coordinates.assemble_coord_array() function so that sequence alignments in the relax data store can be used.  The logic has also been redefined as:  1, use a sequence alignment from the relax data store if present;  2, use no sequence alignment if coordinates only come from structural models;  3, fall back to a residue number based alignment.  The residue number based alignment is yet to be implemented.  As a consequence, the lib.structure.internal.coordinates.assemble_coord_array() function has been greatly simplified.  It no longer handles sequence alignments, but instead expects the residue skipping data structure, built from the alignment, as an argument.  The seq_info_flag argument has also been eliminated in this function as well as the pipe_control.structure.main module.
        * Updated the structure.displacement user function for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
        * Updated the structure.find_pivot user function for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
        * Updated the structure.atomic_fluctuations user function for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
        * Updated the structure.rmsd user function for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
        * Updated the structure.web_of_motion user function for the changed atomic assembly logic.  This now uses the assemble_structural_coordinates() function of the pipe_control.structure.main module to obtain the common coordinates based on pre-existing sequence alignments, no-alignment, or the default of a residue number based alignment.
        * Fix for the structure.superimpose user function if no data pipes are supplied.  This reintroduces the pipes list construction.
        * Fix for the new pipe_control.structure.main.assemble_structural_coordinates() function.  The atom_id argument is now passed into the assemble_atomic_coordinates() function of the lib.structure.internal.coordinates module so that atom subsets are once again recognised.
        * Another fix for the new pipe_control.structure.main.assemble_structural_coordinates() function.  The logic for determining if only models will be superimposed was incorrect.
        * Implemented the residue number based alignment in the atomic assembly function.  This is in the new pipe_control.structure.main.assemble_structural_coordinates() function.  The code for creating the residue skipping data structure is now shared between the three sequence alignment options.
        * Implemented the multiple sequence alignment method based on residue numbers.  This is the new msa_residue_numbers() function in the lib.sequence_alignment.msa module.  The logic is rather basic in that the alignment is based on a residue number range from the lowest residue number to the highest - i.e. it does not take into account gaps in common between all input sequences.
        * The residue number based sequence alignment is now executed when assembling atomic coordinates.  This is in the assemble_structural_coordinates() function of the pipe_control.structure.main module.
        * Modified the internal structural object one_letter_codes() method.  This now validates the models to make sure all models match, and the method requires the selection object so that residue subsets can be handled.
        * The assemble_atomic_coordinates() function now calls one_letter_codes() with the selection object.  This is the lib.structure.internal.coordinates module function.
        * Fix for the residue number based sequence alignment when assembling structural coordinates.  This is in the assemble_structural_coordinates() function of the pipe_control.structure.main module.  The sequences of the different molecules can be of different lengths.
        * Shifted the residue skipping data structure construction into the relax library.  The code was originally in pipe_control.structure.main.assemble_structural_coordinates() but has been shifted into the new lib.sequence_alignment.msa.msa_residue_skipping() function.  This will also for greater code reuse.  The lib.sequence_alignment.msa module is also a better location for such functionality.
        * Renamed the Structure.test_sequence_alignment_molecules system test.  The new name is Structure.test_sequence_alignment_central_star_nw70_blosum62, to better reflect what the test is doing.
        * Modified the Structure.test_sequence_alignment_central_star_nw70_blosum62 system test.  Some residues are now deleted so that the sequences are not identical.
        * Created the Structure.test_sequence_alignment_residue_number system test.  This will be used to test the structure.sequence_alignment user function together with the 'residue number' MSA algorithm.  This is simply a copy of the Structure.test_sequence_alignment_central_star_nw70_blosum62 system test with a few small changes.
        * Corrections and simplifications for the Structure.test_sequence_alignment_residue_number system test.
        * Modified the structure.sequence_alignment user function arguments.  The pairwise_algorithm and matrix arguments can no be None, and they default to None.
        * Updated the Structure.test_align_CaM_BLOSUM62 system test script.  The MSA algorithm and pairwise alignment algorithms are now specified in the structure.sequence_alignment user function calls.
        * Creation of the lib.sequence_alignment.msa.msa_general() function.  This consists of code from the structure.sequence_alignment user function backend function pipe_control.structure.main.sequence_alignment() for selecting between the different sequence alignment methods.
        * The structure.sequence_alignment user function now sets some arguments to None before storage.  This is for all arguments not used in the sequence alignment.  For example the residue number based alignment does not use the gap penalties, pairwise alignment algorithm or the substitution matrices.
        * Fix for the lib.sequence_alignment.msa.msa_residue_skipping() function.  The sequences argument for passing in the one letter codes has been removed.  The per molecule loop should be over the alignment strings rather than one letter codes, otherwise the loop will be too short.
        * Fix for the internal structural object atomic coordinate assembly function.  This is the pipe_control.structure.main.assemble_structural_coordinates() function.  The case of no sequence alignment being required as only models are being handled is now functional.  The strings and gaps data structures passed into the lib.sequence_alignment.msa.msa_residue_skipping() function for generating the residue skipping data structure are now set to the one letter codes and an empty structure of zeros respectively.
        * Test data directory renaming.  The test_suite/shared_data/diffusion_tensor/spheroid directory has been renamed to spheroid_prolate.  This is in preparation for creating oblate spheroid diffusion relaxation data.
        * Creation of oblate spheroid diffusion relaxation data.  This will be used in the Structure.test_create_diff_tensor_pdb_oblate system test.
        * Fix for the oblate spheroid diffusion relaxation data.  The diffusion parameters are constrained as Dx <= Dy <= Dz.
        * More fixes for the Structure.test_create_diff_tensor_pdb_oblate system test.  The initial Diso value is now set to the real final Diso, and the PDB file contents have been updated for the fixed oblate spheroidal diffusion relaxation data.
        * Updates for many of the Diffusion_tensor system tests.  This is due to the changed directory names in test_suite/shared_data/diffusion_tensor/.  The ds.diff_dir variable has been introduced to point to the correct data directory.
        * Large improvement for the GUI test tearDown() clean up method, fixing the tests on wxPython 2.8.  The user function window destruction has been shifted into a new clean_up_windows() method which is executed via wx.CallAfter() to avoid racing conditions.  In addition, the spin viewer window is destroyed between tests.  The spin viewer window change allows the GUI tests to pass on wxPython 2.8 again.  This also allows the GUI tests to progress much further on Mac OS X systems before they crash again for some other reason.  This could simply be hiding a problem in the spin viewer window.  However it is likely to be a racing problem only triggered by the super fast speed of the GUI tests and a normal user would never be able to operate the GUI on the millisecond timescale and hence may never see it.
        * Reverted the wxPython 2.8 warning printout when starting relax, introduced in relax 3.3.5.
        * Reverted the skipping of the GUI tests on wxPython 2.8, introduced in relax 3.3.5.
        * Reverted the General.test_bug_23187_residue_delete_gui GUI test disabling, introduced in relax 3.3.5.  The 'Bus Error' on Mac OS X due to this test is no longer an issue, as the spin viewer window is now destroyed after each GUI test.
        * Created a special Destroy() method for the spin viewer window.  This is for greater control of the spin viewer window destruction.  First the methods registered with the observer objects are unregistered, then the children of the spin viewer window are destroyed, and finally the main spin viewer window is destroyed.  This change saves a lot of GUI resources in the GUI tests (there is a large reduction in 'User Objects' and 'GDI Objects' used on MS Windows systems, hence an equivalent resource reduction on other operating systems).
        * Fix for the GUI test clean_up_windows() method called from tearDown().  The user function window (Wiz_window) must be closed before the user function page (Uf_page), so that the Wiz_window._handler_close() can still operate the methods of the Uf_page.  This avoids a huge quantity of these errors:  Traceback (most recent call last): __getattr__ wx._core.PyDeadObjectError: The C++ part of the Uf_page object has been deleted, attribute access no longer allowed.
        * Simplification of the Dead_uf_pages.test_mol_create GUI test.  The RelaxError cannot be caught from the GUI user function window, therefore the try statement has been eliminated.
        * More memory saving improvements for the GUI test suite tearDown() method.  The clean_up_windows() method now loops through all top level windows (frames, dialogs, panels, etc.) and calls their Destroy() method.
        * Created the gui.uf_objects.Uf_object.Destroy() method.  This will be used to cleanly destroy the user function object.
        * Modified the GUI test suite _execute_uf() method.  This user function execution method now calls the user function GUI object Destroy() method to clean up all GUI objects.  This should save memory for GUI objects in the GUI test suite.
        * Modified the GUI test suite tearDown() method.  The clean_up_windows() method called by tearDown() now prints out a lost of all of the living windows instead of trying to destroy them (which causes the running of the GUI tests in the GUI to cause the GUI to be destroyed).  The printouts will be used for debugging purposes.
        * Fixes for the custom Wiz_window.Destroy() method.  This will now first close the wizard window via the Close() method to make sure all of the wizard pages are properly updated.  In the end the wizard DestroyChildren() method is called to clean up all child wx objects, and finally Destroy() is called to eliminate the wizard GUI object.
        * The GUI test suite tearDown() method now calls the user function GUI wizard Destroy() method.  This is for better handling of user function elimination.
        * Fixes for the user function GUI object Destroy() method.  This matches the code just deleted in the GUI test suite tearDown() method for handing the user function page object.
        * More fixes for the user function GUI object Destroy() method.  This page GUI object is destroyed by the wizard window Destroy() method, so destroying again causes wxPython runtime errors.
        * Spacing printout for the list of still open GUI window elements.  This is for the GUI test tearDown() method.
        * Shifted the printouts from the GUI tests suite clean_up_windows() method to the tearDown() method.  This change means that the printouts are not within a wx.CallAfter() call, but rather at the end of the tearDown() method just prior to starting the next test.
        * Simplification of the GUI analysis post_reset() method.  This now uses the delete_all() and hence delete_analysis() methods to clean up the GUI.  The reset argument has been added to skip the manipulation of relax data store data, as the data store is empty after a reset.  However the calling of the delete_analysis() method now ensures that the analysis specific delete() method is now called so that the GUI elements can be properly destroyed.
        * Proper destruction of the peak analysis wizard of the NOE GUI analysis.  The peak wizard's Destroy() method is now called and the self.peak_wizard object deleted in the NOE GUI analysis delete() method.
        * Improved memory management in the NOE GUI analysis peak_wizard_launch() method.  This method was just overwriting the self.peak_wizard object with a new object.  However this does not destroy the wxPython window.  Now if a peak wizard is detected, its Destroy() method is called before overwriting the object.
        * Improved GUI clean up when terminating GUI tests.  The clean_up_windows() method, called from tearDown(), now also destroys the pipe editor window, the results viewer window, and the prompt window.  This ensures that all of the major relax windows are destroyed between GUI tests.
        * Improved memory management in the relaxation curve-fitting GUI analysis.  The peak intensity loading wizard is now properly destroyed.  This is both via the delete() function for terminating the analysis calling the wizard Delete() method, and in the peak_wizard_launch() method calling the wizard Delete() method prior to overwriting the self.peak_wizard object with a new GUI wizard.
        * Improved memory management in the model-free GUI analysis.  The dipole-dipole interaction wizard is now properly destroyed.  This is both via the delete() function for terminating the analysis calling the wizard Delete() method, and in the setup_dipole_pair() method calling the wizard Delete() method prior to overwriting the self.dipole_wizard object with a new GUI wizard.
        * Improved memory management in the model-free GUI analysis.  The analysis mode selection window (a wx.Dialog) is now being destroyed in the analysis delete() method.  This appears to work on Linux, Windows, and Mac systems.
        * Improved memory management in the model-free GUI analysis.  The local tm and model-free model windows are now destroyed in the GUI analysis delete() method.
        * Improved termination of the GUI tests.  The clean_up_windows() method now calls the results viewer and pipe editor window handler_close() methods.  This ensures that all observer objects are cleared out so that the methods of the dead windows can no longer be called.
        * Fix for the previous commit, calls to wx.Yield() are required to flush the calls on the observer objects after unregisteristing them and deleting the results and pipe editor windows.
        * Improved memory management in the relaxation dispersion GUI analysis.  The peak intensity loading wizard is now properly destroyed.  This is both via the delete() function for terminating the analysis calling the wizard Delete() method, and in the peak_wizard_launch() method calling the wizard Delete() method prior to overwriting the self.peak_wizard object with a new GUI wizard.
        * Created custom Destroy() methods for the pipe editor and results viewer GUI windows.
        * Improved memory management in the relaxation dispersion GUI analysis.  The dispersion model list window is now destroyed in the GUI analysis delete() method.
        * Fixes for the custom Destroy() methods for the pipe editor and results viewer GUI windows.  The event argument is now a keyword argument which defaults to None.  This allows the Destroy() methods to be called without arguments.
        * Temporary disablement of the results viewer window destruction in the GUI tests.  This currently, for some unknown reason, causes segfault crashes of the GUI tests on Linux systems.
        * Changes for how the main GUI windows are destroyed by the GUI test tearDown() method.  These changes revert some of the code of previous commits.  The recently introduced pipe editor and results viewer windows Delete() methods have been deleted.  Instead the Close() methods are called in the tearDown() method to unregister the windows from the observer objects, followed by a wx.Yield() call to flush the wx events, and then the clean_up_windows() GUI test base method is called within a wx.CallAfter() call.  This avoids the racing induced segfaults in the GUI tests.
        * Improved memory management in the spin viewer window.  The spin loading wizard is now destroyed in the Destroy() method as well as before reinitialising the wizard in the load_spins_wizard() method.
        * The GUI tests tearDown() method now prints out the Wizard windows title, if not destroyed.
        * The Wizard window title is now being stored as a class instance variable.
        * Improved memory management in the relaxation data list GUI element, as well as the base list object.  The relaxation data loading wizard is now destroyed in the Base_list.delete() method, or any wizard for that matter.  In addition, the relaxation data loading wizard is destroyed before reinitialising the wizard in the wizard_exec() method.
        * Better memory management for the missing data dialog in the GUI analyses.  The dialog is now stored as the class variable missing_data, and then is destroyed in the analysis delete() method.  Without this, the wxPython dialog would remain in memory for the lifetime of the program.
        * Improved memory management for the Sequence and Sequence_2D input GUI elements.  These are mainly used in the user function GUI windows.  The dialogs are now destroyed before a second is opened.
        * Improved memory management for the GUI user function windows.  The Destroy() method will now destroy any Sequence or Sequence_2D windows used for the user function arguments.
        * The relax prompt window is now being destroyed by the GUI test suite tearDown() method.  The window is first closed in the tearDown() method and then destroyed in the clean_up_windows() method.
        * Added memory management checking to the GUI test suite tearDown() method.  If any top level windows are present, excluding the main GUI window and the relax controller, then a RelaxError will be raised.  Such a check will significantly help in future GUI coding, as now there will be feedback if not all windows are properly destroyed.
        * Popup menus are now properly destroyed in the GUI tests.  In many instances, the wx.Menu.Destroy() method was only being called when the GUI is shown.  This causes memory leaking in the GUI tests.
        * Changed the title for the user function GUI windows.  To better help identify what the window is, the title is now the user function name together with text saying that it is a user function.
        * Removed the wx.CallAfter() call in the GUI tests tearDown() method.  This was used to call the clean_up_windows() method.  However the value of wx.Thread_IsMain() shows that the tearDown() method executes in the main GUI thread.  Therefore the wx.CallAfter() call for avoiding racing conditions is not needed.
        * Fix for the GUI tests clean_up_windows() tearDown method.  After destroying all of the main GUI windows, a wx.Yield() call is made to flush the wxPython event queue.  This seems to help with the memory management.
        * Temporary disabling of the memory management check in the GUI tests tearDown() method.  For some reason, it appears as if it is not possible to destroy wx Windows on MS Windows.
        * Created the relax GUI prompt Destroy() method.  This is used to cleanly destroy the GUI prompt by first unregistering with the observer objects, destroying then deleting the wx.py.shell.Shell instance, and finally destroying the window.
        * Modified the manual_c_module.py developer script so that the path can be supplied on the command line.
        * Removed some unused imports, as found by devel_scripts/find_unused_imports.py.
        * Added a copyright notice to the memory_leak_test_relax_fit.py development script.  This is to know how old the script is, to see how out of date it is in the future.
        * Created the memory_leak_test_GUI_uf.py development script.  This is to help in tracking down memory leaks in the relax GUI user functions.  Instead of using a debugging Python version and guppy (wxPython doesn't seem to work with these), the pympler Python package and its muppy module is used to produce a memory usage printout.
        * Clean up of the memory_leak_test_GUI_uf.py development script.
        * Created the new devel_scripts/memory_management/ directory.  This will be used for holding all of the memory C module leak detection, GUI object leak detection, memory management, etc. development scripts.
        * Shifted the memory_leak_test_GUI_uf.py script to devel_scripts/memory_management/GUI_uf_minimise_execute.py.
        * Created a base class for the memory management scripts for the GUI user functions.  The core of the GUI_uf_minimise_execute.py script has been converted into the GUI_base.py base class module.  This will allow for new GUI user function testing scripts to be created.
        * Removal of unused imports from the GUI user function memory testing scripts.
        * Created a script for testing the memory management when calling the time GUI user function.
        * Large memory management improvement for the relax GUI wizards and GUI user functions.  The pympler.muppy based memory management scripts in devel_scripts/memory_management for testing the GUI user function windows was showing that for each GUI user function call, 28 wx._core.BoxSizer elements were remaining in memory.  This was traced back to the gui.wizards.wiz_objects.Wiz_window class, specifically the self._page_sizers and self._button_sizers lists storing wx.BoxSizer instances.  The problem was that 16 page sizers and 16 button sizers were initialised each time for later use, however the add_page() method only added a small subset of these to the self._main_sizer wx.BoxSizer object.  But the Destroy() method was only capable of destroying the wx.BoxSizer instances associated with another wxPython object.  The fix was to add all page and button sizers to the self._main_sizer object upon initialisation.  This will solve many memory issues in the GUI, especially in the GUI tests on Mac OS X systems causing 'memory error' or 'bus error' messages and on MS Windows due to 'USER Object' and 'GDI object' limitations.
        * The maximum number of pages in the GUI wizard is no longer hardcoded.  The max_pages argument has been added to allow this value to be changed.
        * Fix for GUI wizards and GUI user functions.  The recent memory management changes caused the wizard windows to have an incorrect layout so that the wizard pages were not visible.  Reperforming a layout of the GUI elements did not help.  The solution is to not initialise sets of max_pages of wx.BoxSizer elements in the wizard __init__() method, but to generate and append these dynamically via the add_page() method.  The change now means that there are no longer multiple unused wx.BoxSizer instances generated for each wizard window created.
        * Fix for the GUI wizard _go_next() method.  The way to determine if there are no more pages needs to be changed, as there are now no empty list elements at the end of the wizard storage objects.
        * Another fix for the now variable sized wizard page list.  This time the fix is in the GUI user function __call__() method.
        * Created the Relax_fit.test_bug_23244_Iinf_graph system test.  This is to catch bug #23244 (https://gna.org/bugs/?23244).


    Bugfixes:
        * Bug fix for the structure.align user function.  The addition of the molecule name to the displacement ID is now correctly performed.
        * Fix for the new Internal_selection.count_atoms() internal structural object selection method.  The method was previously returning the total number of molecules, not the total number of atoms in the selection.
        * Printout fix for the backend of the structure.translate and structure.rotate user functions.  Model numbers of zero were not correctly identified.  This also affects the structure.align and structure.superimpose user functions which uses this backend code.
        * Another fix for the Internal_selection.count_atoms() internal structural object selection method.
        * Small fix for the lib.structure.internal.coordinates.assemble_coord_array() function.  The termination condition for determining the residues in common between all structures was incorrect.
        * The Structure.test_create_diff_tensor_pdb_oblate system test now uses oblate diffusion relaxation data.  This fixes bug #23232 (https://gna.org/bugs/?23232), the failure of this system test on Mac OS X.  The problem was that the system test was previously using relaxation data for prolate spheroidal diffusion and fitting an oblate tensor to that data.  This caused the solution to be slightly different on different CPUs, operating systems, Python versions, etc. and hence the PDB file representation of the diffusion would be slightly different.
        * Big bug fix for the GUI tests on MS Windows systems.  On MS Windows systems, the GUI tests were unable to complete without crashing.  This is because each GUI element requires one 'User object', and MS Windows has a maximum limit of 10,000 of these objects.  The GUI tests were taking more than 10,000 and then Windows would say - relax, you die now.  The solution is that after each GUI test, all user function windows are destroyed.  The user function page is a wx.Panel object, so this requires a Destroy() call.  But the window is a Uf_page instance which inherits from Wiz_page which inherits from wx.Dialog.  Calling Destroy() on MS Windows and Linux works fine, but is fatal on Mac OS X systems.  So the solution is to call Close() instead.
        * Fix for the default grid_inc argument for the relaxation curve-fitting auto-analysis.  This needs to be an integer.
        * Fix for bug #23244 (https://gna.org/bugs/?23244).  The relaxation curve-fitting auto-analysis now outputs text files and Grace graphs for the I0 parameter and the Iinf parameter if it exists.
        * Fixes for the package checking unit tests on MS Windows for the target_functions package.  The compiled relaxation curve-fitting file is called target_functions\relax_fit.pyd on MS Windows.  The package checking was only taking into account *.so compiled files and not *.pyd file.



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

    Features:
        * Improvements to the NMR spectral noise error analysis.
        * Addition of the new spectrum.error_analysis_per_field user function to quickly perform a per-NMR field spectrum error analysis.
        * Added spectrum.sn_ratio user function to calculate the signal to noise ration for all spins, and introduced the per-spin sn_ratio parameter for the NOE, relaxation curve-fitting and relaxation dispersion analyses.
        * Added the new select.sn_ratio and deselect.sn_ratio user functions to change the selection status of spins according to their signal to noise ratio.
        * Expansion of the grace.write user function to handle both first and last point normalisation for reasonable R1 curves in saturation recovery experiments.
        * Conversion of the structure.align, structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose and structure.web_of_motion user functions to a standardised pipes/models/molecules/atom_id argument design to allow the user functions to operate on different data pipes, different structural models and different molecules simultaneously and to restrict operation to a subset of all spins.  This is also used by the new structure.atomic_fluctuations user function.
        * Addition of the displace_id argument to the structure.align and structure.superimpose user functions to allow finer control over which atoms are translated and rotated by the algorithm independently of the align_id atom ID for selecting atoms used in the superimposition.
        * Large improvement for the PDB molecule identification code affecting the structure.read_pdb user function allowing discontinuous ATOM and HETATM records with the same chain ID to be loaded as the same molecule.
        * Creation of the lib.plotting package for assembling all of the data plotting capabilities of relax into a unified software independent API.
        * Implementation of the new structure.atomic_fluctuations user function for creating text output or Gnuplot graphs of the correlation matrix of interatomic distance, angle or parallax shift fluctuations, measured as sample standard deviations, between different molecules.
        * The implementation of ordinary least squares fitting.
        * And improvements for the pcs.corr_plot and rdc.corr_plot user functions.
        * The implementation of Needleman-Wunsch pairwise sequence alignment algorithm using the BLOSUM62, PAM250 and NUC 4.4 substitution matrices for more advanced 3D structural alignments via the structure.align user function.  The Needleman-Wunsch algorithm is implemented as in the EMBOSS software to allow for gap opening and extension penalties as well as end penalties.  This is also used in all the other structure user functions dealing with multiple molecules - structure.atomic_fluctuations, structure.displacement, structure.find_pivot, structure.rmsd, structure.superimpose, structure.web_of_motion.
        * Improved support for PDB secondary structure metadata for the structure.read_pdb and structure.write_pdb user functions.


    Changes:
        * Added a sentence to the start of the citation chapter about http://www.nmr-relax.com links.  This is to convince people to more freely use this URL.  In that way, the relax search engine ranking should be significantly increased.  And it will be easier for new users to get into relax.
        * Removing the automatic function for error analysis per field in the relaxation dispersion auto-analysis.  This function is moved into pipe_control/spectrum.py.
        * Added the function pipe_control.error_analysis_per_field(), as an automatic way of submitting subset IDs per field for error analysis.
        * For the pipe_control.spectrum.error_analysis_per_field(), added additional printout of subset IDs used for error analysis.
        * In the auto_analysis.relax_disp module, used the new spectrum.error_analysis_per_field user function to calculate the peak intensity errors.
        * Reinserted the error_analysis() function in the auto class of relaxation dispersion.  This function only checks if the error analysis has not been be performed before, and then decides to call the user function spectrum.error_analysis_per_field().  The implementation can be tested with the Relax_disp.test_estimate_r2eff_err_auto system test.
        * In pipe_control.spectrum.error_analysis_per_field() removed the checks which would stop the calculation of the errors.  This function will now always run, which will make it possible for the user to try different error calculations.
        * Copy of the system test script peak_lists.py to spectrum.py.  This is for the implementation of calculation of signal to noise ratio, selection and deselection.
        * Initialised first test in the Spectrum system test class.  This is simply loading some intensity data, and checks data.  The system test test Spectrum.test_signal_noise_ratio will be expanded to test the calculation of the signal to noise ratio.
        * Added the Spectrum system test class to the init file, so these system tests can be executed.
        * Added the pipe_control.spectrum.signal_noise_ratio() backend function, for calculation of the signal to noise ratio per spin.
        * Added system test Spectrum.test_grace_int, to test plotting the intensity per residue.  This is to prepare for a grace plotting of the signal to noise level per residue.  Also added additional tests for signal to noise ratio calculation in the system test Spectrum.test_signal_noise_ratio.
        * Added system test Spectrum.test_grace_sn_ratio to help implement plotting the signal to noise ratio per residue.
        * Added the common API Parameter structure 'sn_ratio' in parameter_object.
        * For the specific analysis of "noe", "relax_disp", and "relax_fit", initialised the sn_ratio parameter structure.
        * Added float around values in signal_noise_ratio() function.
        * Made the user function spectrum.sn_ratio smaller.
        * Added two new system tests Spectrum.test_deselect_sn_ratio_all and Spectrum.test_deselect_sn_ratio_any.  These test the user function deselect.sn_ratio, to deselect spins with a signal to noise ratio lower than the specified ratio.
        * Added function in pipe_control.spectrum.sn_ratio_deselection(), a function to deselect spins according to the signal to noise ratio.  The function is flexible, since it possible to use different comparison operators.  And the function can be switched, so a selection is made instead.
        * Added the new deselect.sn_ratio user function to deselect spins according to their signal to noise ratio.
        * Added new backend function in pipe_control.spectrum.sn_ratio_selection.  This is to select spins with a signal to noise ratio, higher or lower than the specified ratio.
        * Added two new system tests Spectrum.test_select_sn_ratio_all and Spectrum.test_select_sn_ratio_any.  These test the select.sn_ratio user function.
        * Added the new select.sn_ratio user function to select spins with signal to noise ratio above a specified ratio.  The default ratio for signal to noise selection is 10.0.  But should probably be 50-100 instead.  The default of 'all_sn' is True, meaning that all signal to noise ratios for the spins needs to pass the test.
        * Small fix for standard values in user function deselect.sn_ratio.  The standard values will deselect spins which have at least one signal to noise ratio which is lower than 10.0.
        * Small fix for the backend of spectrum sn_ratio_selection() and sn_ratio_deselection().  The standard values have been changed.
        * Fix for the window size in user function dx.map.  The size of the windows was not compatible with the latest change.
        * Documentation fix in the manual for the lower and upper bonds for parameters in the grid search.
        * Documentation fix in the manual for the lower and upper bonds for parameters in the minimisation.
        * Documentation fix in the manual for the scaling values of parameters in the minimisation.  The scaling helps the minimisers to make the same step size for all parameters when moving in the chi2 space.
        * Added a devel script which can quickly convert oxygen icons to the desired sizes.
        * Extended the devel script image size converter.
        * Adding new oxygen icon in all needed sizes.
        * Comment fix in user function select.sn_ratio and deselect.sn_ratio.
        * Important fix for the spectrum.error_analysis_per_field user function.  This is for the compilation of the user manual.  The possessive apostrophe should not be used in the text "spectrum ID's".  This grammar error triggers an unfortunate bug in the docstring fetching script docs/latex/fetch_docstrings.py whereby the script thinks that ' is the start of a quote.
        * Added a compressed EPS version of the 128x128/actions/document-preview-archive Oxygen icon.  The EPS bounding box was manually changed to 0 0 18 18 in a text editor.  The scanline translation parameters were also fixed by changing them all to 18 as well.  This allows the icon to be used in the relax manual.
        * Fix for the blacklist objects in data_store.data_classes.Element.to_xml().  The class blacklist variable was not being taken into account.
        * Added the norm_type argument to the grace.write user function.  This is in response to http://thread.gmane.org/gmane.science.nmr.relax.devel/7392/focus=7438.  This norm_type argument can either be 'first' or 'last' to allow different points of the plot to be the normalisation factor.  The default of 'first' preserves the old behaviour of first point normalisation.
        * The relax_fit_saturation_recovery.py system test script now sets the norm_type argument.  This is for testing out this new option for the grace.write user function.
        * The new grace.write user function norm_type argument has been activated.  The argument is now passed from pipe_control.grace.write into the write_xy_data() function of the lib.software.grace module, and is used to select which point to use for the normalisation.
        * The relaxation exponential curve-fitting auto-analysis now sets the normalisation type.  This is for the new grace.write user function.  If the model for all spins is set to 'sat', then the norm_type will be set to 'last'.  This allows for reasonable normalised curves for the saturation recovery R1 experiment types.
        * Change for norm_type variable in the relaxation exponential curve-fitting auto-analysis.  This is now set to 'last', not only for the saturation recovery, but now also for the inversion recovery experiment types.  This ensures that the normalisation point is the steady state magnetisation peak intensity.
        * Cleared the list of blacklisted objects for the cdp.exp_info data structure.  The data_store.exp_info.ExpInfo class blacklist variable had previously not been used.  But after recent changes, the list was now active.  As all the contents of the container were blacklisted, the container was being initialised as being empty when reading the XML formatted state or results files.  Therefore the blacklist is now set to an empty list.
        * Improvements for all of the tables of the relaxation dispersion chapter of the manual.  The captions are now the full width (or height for rotated tables) of the page in the PDF version of the manual.  The \latex{} command from the latex2html package has been used to improve the HTML versions of the tables by deactivating the landscape environment, the cmidrule command, and the caption width commands.  This results in properly HTML formatted tables, rather than creating a PNG image for the whole table.  These should significantly improve the tables in the webpages http://www.nmr-relax.com/manual/Comparison_of_dispersion_analysis_software.html, http://www.nmr-relax.com/manual/The_relaxation_dispersion_auto_analysis.html, and http://www.nmr-relax.com/manual/Dispersion_model_summary.html.
        * Created the Structure.test_align_molecules system test.  This will be used to extend the functionality of the structure.align user function to be able to align different molecules in the same data pipe, rather than requiring either models or identically named structures in different data pipes.
        * Modified the Structure.test_align_molecules system test.  This now simultaneously checks both the pipes and molecules arguments to the structure.align user function.
        * More changes for the new Structure.test_align_molecules system test.
        * Some more fixes for the Structure.test_align_molecules system test.
        * Change to the Structure.test_align system test.  The molecules argument for the structure.align user function has been changed to match the models argument, in that it now needs to be a list of lists with the first dimension matching the pipes argument.  This change is to help with the implementation of the new structure.align functionality.
        * Implemented the new molecules argument for the structure.align user function.  In addition to accepting the new argument, the user function backend has been redesigned for flexibility.  The assembly of coordinates and final rotations and translations now consist of three loops over desired data pipes, all models, and all molecules.  If the models or molecules arguments are supplied, then the models or molecules in the loop which do not match are skipped.  This logic simplifies and cleans up the backend.
        * Created the Structure.test_rmsd_molecules system test.  This will be used to implement a new molecules argument for the structure.rmsd user function so that the RMSD between different molecules rather than different models can be calculated.
        * Implemented the new molecules argument for the structure.rmsd user function.  This allows the RMSD between different molecules rather than different models to be calculated, extending the functionality of this user function.
        * Created the Structure.test_displacement_molecules system test.  This will be used to implement the new molecules argument for the structure.displacement user function.
        * Implemented the molecules argument for the structure.displacement user function.  This allows the displacements (translations and rotations) to be calculated between different molecules rather than different models.  This information is stored in the dictionaries of the cdp.structure.displacement object with the keys set to the molecule list indices.
        * Created the Structure.test_find_pivot system test.  This is to check the structure.find_pivot user function as this algorithm is currently not being checked in the test suite.
        * Created the Structure.test_find_pivot_molecules system test.  This will be used to implement support for a molecules argument in the structure.find_pivot user function so that different molecules rather than different models can be used in the analysis.
        * Increased the precision of pivot optimisation in the Structure.test_find_pivot_molecules system test.
        * Implemented the molecules argument for the structure.find_pivot user function.  This allows the motional pivot optimisation between different molecules rather than different models.
        * Shifted the atomic assembly code from the structure.align user function into its own function.  The new function assemble_coordinates() of the pipe_control.structure.main module will be used to standardise the process of assembling atomic coordinates for all of the structure user functions.  This will improve the support for comparing different molecules rather than different models as missing atoms or divergent primary sequence are properly handled, and it has multi-pipe support.
        * Changed the argument order for the structure.align user function.  The standardised order will now be pipes, models, molecules, atom_id, etc.
        * Converted the structure.find_pivot user function to the new pipes/models/molecules/atom_id design.  This allows the motional pivot algorithm to work on atomic coordinates from different data pipes, different structural models, and different molecules.  The change allows the Structure.test_find_pivot_molecules system test to now pass, as missing atomic data is now correctly handled.  The user function backend uses the new pipe_control.structure.main.assemble_coordinates() function.  The Structure.test_find_pivot and Structure.test_find_pivot_molecules system tests have been updated for the user function argument changes.
        * Shift of the atomic coordinate assembly code into the relax library.  Most of the pipe_control.structure.main.assemble_coordinates() function has been shifted into the assemble_coord_array() function of the new lib.structure.internal.coordinates module.  The pipe_control function now only checks the arguments and assembles the structural objects from the relax data store, and then calls assemble_coord_array() to do all of the work.  This code abstraction increases the usefulness of the atomic coordinate assembly and allows it to be significantly expanded in the future, for example by being able to take sequence alignments into consideration.
        * Tooltip standardisation for the structure.align and structure.find_pivot user functions.
        * The coordinate assembly function now returns list of unique IDs.  This is for each structural object, model and molecule.
        * Changed the structure ID strings returned by the assemble_coord_array() function.  This is from the lib.structure.internal.coordinates module.  The structural object name is only included if more than one structural object has been supplied.
        * More improvements for the structure ID strings returned by the assemble_coord_array() function.
        * Converted the internal structural displacement object to use unique IDs rather than model numbers.  This allows the object to be much more flexible in what types of structures it can handle.  This is in preparation for a change in the structure.displacement user function.
        * Converted the structure.displacement user function to the new pipes/models/molecules/atom_id design.  This allows the displacements to be calculated between atomic coordinates from different data pipes, different structural models, and different molecules.  The user function backend has been hugely simplified as it now uses the new pipe_control.structure.main.assemble_coordinates() function.  The Structure.test_displacement system test has been updated for the user function argument changes.
        * Another refinement for the structure ID strings returned by the assemble_coord_array() function.
        * Updated the Structure.test_displacement_molecules system test.  This is for the changes to the structure.displacement user function.
        * Docstring spelling fixes for the steady-state NOE and relaxation curve-fitting auto-analyses.
        * Converted the structure.rmsd user function to the new pipes/models/molecules/atom_id design.  This allows the RMSD calculation to work on atomic coordinates from different data pipes, different structural models, and different molecules.  The user function backend uses the new pipe_control.structure.main.assemble_coordinates() function.  The Structure.test_rmsd_molecules system test has been updated for the user function argument changes.
        * Created the internal structural object model_list() method.  This is to simplify the assembly of a list of all current models in the structural object.
        * Converted the structure.superimpose user function to the new pipes/models/molecules/atom_id design.  The user function arguments have not changed, however the backend now uses the new pipe_control.structure.main.assemble_coordinates() function.  This is to simply decrease the number of failure points possible in the structure user functions.  The change has no effect on the user function use or results.
        * Documentation fix for the assemble_coord_array() function.  The return values for lib.structure.internal.coordinates.assemble_coord_array() were incorrectly documented.
        * Modified the Structure.test_bug_22070_structure_superimpose_after_deletion system test.  This now calls the structure.align user function after calling the structure.superimpose user function to better test a condition that can trigger bugs.
        * Fixes for the structure.superimpose and structure.align user functions.  The fit_to_mean() and fit_to_first() functions of lib.structure.superimpose where being incorrectly called, in that they expect a list of elements and not lists of lists.
        * Code refactorisation for the structure.align user function backend.  The looping over data pipes, model numbers, and molecule names, skipping those that don't match the function arguments, has been shifted into the new structure_loop() generator function of the pipe_control.structure.main module.  This function assembles the data from the data store and then calls the new loop_coord_structures() generator function of the lib.structure.internal.coordinates module which does all of the work.
        * Some docstring expansions for the pipe_control.structure.main module functions.
        * Refactored the descriptions of a number of structure user functions.  This includes the structure.align, structure.displacement, structure.find_pivot, structure.rmsd and structure.superimpose user functions.  The paragraph_multi_struct and paragraph_atom_id module strings have been created and are shared as two paragraphs for each of these user function descriptions.  This standardises the pipe/model/molecule/atom_id descriptions.  The user function wizard page sizes have been updated for these changes.
        * Changed the design of the lib.structure.internal.coordinates.assemble_coord_array() function.  The elements_flag argument has been renamed to seq_info_flag.  If this is set, then in addition to the atomic elements, the molecule name, residue name, residue number, and atom name is now assembled and returned.  This information is now the common information between the structures, hence the return values for the elements are a list of str rather than list of lists.  All of the code in pipe_control.structure.main has been updated for the change.
        * Fix for the structure.align user function if no data pipes are supplied.  The pipes list was no longer being created as it was shifted to the assemble_coordinates() function, however it is required for the translation and rotation function calls.
        * Converted the structure.web_of_motion user function to the new pipe/model/molecule/atom_id design.  This allows the web of motion representation to work on atomic coordinates from different data pipes, different structural models, and different molecules.  The user function backend uses the new pipe_control.structure.main.assemble_coordinates() function to assemble the common atom coordinates, molecule names, residue names, residue numbers, atom names and elements.  All this information is then used to construct the new web of motion PDB file.  Therefore the entire backend has been rewritten.  The Structure.test_web_of_motion_12, Structure.test_web_of_motion_13, and Structure.test_web_of_motion_all system tests have all been updated for the changed structure.web_of_motion user function arguments.  In addition, the system tests Structure.test_web_of_motion_12_molecules, Structure.test_web_of_motion_13_molecules and Structure.test_web_of_motion_all_molecules have been created as a copy of the other tests but with the 3 structures loaded as different molecules.
        * Fix for the IDs returned by lib.structure.internal.coordinates.assemble_coord_array().  The list of unique structure IDs was being incorrectly constructed if multiple molecules are present but the molecules argument was not supplied.  It would be of a different size to the coordinate data structure.
        * Fix for the Structure.test_displacement system test for the assemble_coord_array() function bugfix.
        * Modified the Structure.test_align system test to show a failure of the structure.align user function.  The alignment causes all atoms in the structural object to be translated and rotated, whereas it should only operate on the atoms of the atom_id argument.
        * Modified the Structure.test_superimpose_fit_to_mean system test.  This is also to demonstrate a bug, this time in the structure.superimpose user function, in which the algorithm causes a translation and rotation of all atoms rather than just those selected by the atom_id argument.
        * Modified some system tests of the structure.align and structure.superimpose user functions.  The displace_id argument has been introduced for both of these user functions for finer control over which atoms are translated and rotated by the algorithm.  This allows, for example, to align structures based on a set of backbone heavy atoms while the protons and side chains are displaced by default.  Or if a domain is aligned, then just that domain can be displaced.
        * Added the displace_id argument to the structure.align and structure.superimpose user functions.  This gives both of these user functions finer control over which atoms are translated and rotated by the algorithm.  This allows, for example, to align structures based on a set of backbone heavy atoms while the protons and side chains are displaced by default.  Or if a domain is aligned, then just that domain can be displaced.
        * Fixes for the Structure.test_superimpose_fit_to_mean system test for the displace_id argument.
        * Modified the Structure.test_align_molecules system test to catch a bug.  This is the failure of the displace_id argument of the structure.align user function when the molecules argument is supplied - all atoms are being displaced instead of a subset.
        * Fix for the displace_id and molecules arguments of the structure.align user function.  The atom ID used for the translations and rotations is now properly constructed from the molecule names in the molecules list and the displace_id string.
        * Changes for water in the PDB file created by the structure.write_pdb user function.  The waters with the residue name 'HOH' are no longer output to HET records.
        * Improvement for the structure.read_pdb user function.  The helix and sheet secondary structure reading now takes the real_mol argument into account to avoid reading in too much information.
        * Improvement for the merge argument of the structure.read_pdb user function.  This argument is now overridden if the molecule to merge to does not exist.  This allows the merge flag to be used together with read_mol and set_mol_name set to lists.
        * Fix for the selective secondary structure reading of the structure.read_pdb user function.  The molecule index needs to incremented by 1 to be the molecule number.
        * Large improvement for the PDB molecule identification code.  This affects the structure.read_pdb user function.  Now the chain ID code, if present in the PDB file, is being used to determine which ATOM and HETATM records belong to which molecule.  All of the records for each molecule are stored until the end, when they are all yielded.  This allows for discontinuous chain IDs throughout the PDB file, something which occurs often with the HETATM records.
        * Expanded the displace_id argument for the structure.align user function.  This can now be a list of atom IDs, so that any atoms can be rotated together with the structure being aligned.  This is useful if the molecules argument is supplied.
        * Fix for the Noe.test_bug_21562_noe_replicate_fail system test.  This is for the changed behaviour of the structure.read_pdb user function.  The problem is that the PDB file read in this test has the chain ID set to X.  This broken PDB causes molecule numbering problems.
        * Expanded the description of the structure.rmsd user function.
        * Changed the paragraph ordering in the documentation of a number of the structure user functions.  This includes the structure.align, structure.displacement, and structure.find_pivot user functions.
        * Fix for the prompt examples documentation for the structure.align user function.
        * Improved the sizing layout of the structure.align user function GUI dialog.
        * Improved the sizing layout of the structure.superimpose user function GUI dialog.
        * Created the Structure.test_atomic_fluctuations system test.  This will be used to implement the idea of the structure.atomic_fluctuations user function.
        * Implemented the structure.atomic_fluctuations user function.  This is loosely based on the structure.web_of_motion user function and is related to it.  The user function will write to file a correlation matrix of interatomic distance fluctuations.
        * Created 4 unit tests for the lib.io.swap_extension function.  This is in preparation for implementing the function.
        * Implemented the lib.io.swap_extension() function.  This is confirmed to be fully functional by its four unit tests.
        * Created the empty lib.plotting package.  This follows from the thread at http://thread.gmane.org/gmane.science.nmr.relax.devel/7444.  The package will be used for assembling all of the data plotting capabilities of relax.  It will make support for different plotting software - Grace, OpenDX, matplotlib, gnuplot, etc - more coherent.  This will be used to create a software independent API for plotting in relax.  I.e. the plotting software is chosen by the user and then the data output by the user function passes into the lib.plotting API which is then passed into the software dependent backend in lib.plotting.
        * Created the Structure.test_atomic_fluctuations_gnuplot system test.  This checks the operation of the structure.atomic_fluctuations user function when the output format is set to 'gnuplot'.  This will be used to implement this option.  The current gnuplot script expected by this test is just a very basic starting script for now.
        * Created the lib.plotting API function correlation_matrix().  This is the lib.plotting.api.correlation_matrix() function.  It will be used for the visualisation of rank-2 correlation matrices.  The current basic API design here uses a dictionary of backend functions (currently empty) for calling the backend.
        * Implemented a very basic gnuplot backend for the correlation_matrix() plotting API function.  This is in the new lib.plotting.gnuplot module.  It creates an incredibly basic gnuplot script for visualising the correlation matrix, assuming a text file has already been created.
        * Enabled the gnuplot format for the structure.atomic_fluctuations user function.  This uses the plotting API correlation_matrix() function for visualisation.  The change allows the Structure.test_atomic_fluctuations_gnuplot system test to pass.
        * Shifted the matrix output of the structure.atomic_fluctuations user function into lib.plotting.text.  The new lib.plotting.text module will be used by the relax library plotting API to output data into plain text format.  The current correlation_matrix() function, which has been added to the API correlation_matrix() function dictionary, simply has the file writing code of the structure.atomic_fluctuations user function.  This significantly simplifies the user function.
        * More simplifications for the structure.atomic_fluctuations user function backend.
        * Fix for the structure.atomic_fluctuations user function backend.  The pipe_control.structure.main.atomic_fluctuations() function no longer opens the output file.
        * The gnuplot correlation_matrix() plotting API function now creates a text file of the data.  The lib.plotting.gnuplot.correlation_matrix() function now calls the lib.plotting.text.correlation_matrix() function prior to creating the gnuplot script.
        * Significantly expanded the gnuplot script from via the correlation_matrix() plotting API function.  This is for the structure.atomic_fluctuations user function.  The output terminal is now set to EPS, the colour map changed from the default to a blue-red map, labels have been added, the plot is now square, and comments are now included throughout the script to help a user hand modify it after creation.
        * Improvement in the comments from the gnuplot correlation_matrix() plotting API function.
        * Updated the Structure.test_atomic_fluctuations_gnuplot system test.  This is for the gnuplot correlation_matrix() plotting API changes which affect the structure.atomic_fluctuations user function.
        * Docstring fixes for the Structure.test_atomic_fluctuations_gnuplot system test.  This was pointing to the structure.rmsd user function instead of structure.atomic_fluctuations.
        * Fixes and improvements for the gnuplot correlation_matrix() plotting API function.  This is for the structure.atomic_fluctuations user function.  The "pm3d map" plot type is incorrect for such data type, so instead of using 'splot', 'plot' is being used instead.  The resultant EPS file is now much smaller.  The colour map has also been changed to one of the inbuilt ones for higher contrast.
        * Forced the gnuplot correlation_matrix plot to be square.  This is for the correlation_matrix() plotting API function used by the new structure.atomic_fluctuations user function.
        * Updated the Structure.test_atomic_fluctuations_gnuplot system test.  This is for the changes of the gnuplot correlation_matrix() plotting API function used by the structure.atomic_fluctuations user function.
        * Docstring fix for the Structure.test_atomic_fluctuations system test.
        * Another docstring fix for the Structure.test_atomic_fluctuations system test.
        * Created the Structure.test_atomic_fluctuations_angle system test.  This will be used to implement the mapping of inter-atomic vector angular fluctuations between structures via a new 'measure' keyword argument for the structure.atomic_fluctuations user function.
        * Implemented angular fluctuations for the structure.atomic_fluctuations user function.  This adds the measure argument to the user function to allow either the default of 'distance' or the 'angle' setting to be chosen.  The implementation is confirmed by the Structure.test_atomic_fluctuations_angle system test which now passes.
        * Clean ups and speed ups of the structure.atomic_fluctuations user function.  Duplicate calculations are now avoided, as the SD matrix is symmetric.
        * Description improvements and GUI layout fixes for the structure.atomic_fluctuations user function.
        * Added the 'parallax shift' measure to the structure.atomic_fluctuations user function.  The parallax shift is defined as the length of the average vector minus the interatomic vector.  It is similar to the angle measure however, importantly, it is independent of the distance between the two atoms.
        * Updated the gnuplot scripts to be executable.  These are the scripts created by the gnuplot specific correlation_matrix() plotting API function.  The file is made executable and the script now starts with "#!/usr/bin/env gnuplot".
        * Created the Structure.test_atomic_fluctuations_parallax system test.  This is to demonstrate that the parallax shift fluctuations are not implemented correctly.
        * Fix for the Structure.test_atomic_fluctuations_parallax system test.  The distance shifts need to be numbers, not vectors.
        * Proper implementation of the 'parallax shift' for the structure.atomic_fluctuations user function.
        * Improved the structure.atomic_fluctuations user function documentation.  The fluctuation categories are now better explained.  And the 'parallax shift' option is now available in the GUI.
        * Fix for the parallax shift description in the structure.atomic_fluctuations user function.  The parallax shift is not quite orthogonal to the distance fluctuations.
        * Implemented ordinary_least_squares function the repeated auto-analysis.  Inspection of statistics books, shows that several authors does not recommend using regression through the origin (RTO).  From Joseph G. Eisenhauer, Regression through the Origin:  RTO residuals will usually have a nonzero mean, because forcing the regression line through the origin is generally inconsistent with the best fit; R square measures (for RTO) the proportion of the variability in the dependent variable "about the origin" explained by regression.  This cannot be compared to R square for models which include an intercept.  From "Experimental design and data analysis for biologists", G. P. Quinn, M. J. Keough: Minimum observed xi rarely extends to zero, and forcing our regression line through the origin not only involves extrapolating the regression line outside our data range but also assuming the relationship is linear outside this range (Cade & Terrell 1997, Neter et al. 1996); We recommend that it is better to have a model that fits the observed data well than one that goes through the origin but provides a worse fit to the observed data; residuals from the no-intercept model no longer sum to zero; usual partition of SSTotal into SSRegression and SSResidual does not work.
        * Added save state for test of bug 23186.  Bug #23186 (https://gna.org/bugs/index.php?23186): Error calculation of individual parameter "dw" from Monte-Carlo, is based on first spin.
        * Added the system test Relax_disp.test_bug_23186_cluster_error_calc_dw which shows the failure of Monte Carlo simulations error calculations.  Bug #23186 (https://gna.org/bugs/index.php?23186): Error calculation of individual parameter "dw" from Monte-Carlo, is based on first spin.
        * Added additional test for the r2a parameter.  Bug #23186 (https://gna.org/bugs/index.php?23186): Error calculation of individual parameter "dw" from Monte-Carlo, is based on first spin.
        * Attempt to implement the GUI test General.test_bug_23187_residue_delete_gui.  This will NOT catch the error.  Bug #23187 (https://gna.org/bugs/index.php?23187): Deleting residue in GUI, and then open spin viewer crashes relax.
        * Added test for spin independent error of k_AB.  Bug #23186 (https://gna.org/bugs/index.php?23186): Error calculation of individual parameter "dw" from Monte-Carlo, is based on first spin.
        * Fix for the showing of the spin viewer window in the GUI tests.  The show_tree() method of the main GUI window class was not calling the custom self.spin_viewer.Show() method, as required to set up the observer objects required to keep the spin viewer window updated.  The value of status.show_gui was blocking this.  Instead the show argument of this Show() method is being set to status.show_gui to allow the method to always be executed.
        * Updated the main relax copyright notices for 2015.
        * The copyright notice in the GUI now uses the info box object.  This is for the status bar at the bottom of the GUI window.  This removes one place where copyright notices needs to be updated each year.  This status text will then be updated whenever the info.py file has been updated.
        * Updated the copyright notice for 2015 in the GUI splash screen graphic.
        * Racing fixes for the General.test_bug_23187_residue_delete_gui GUI test.  Some GUI interpreter flush() calls have been added to avoid racing in the GUI.  The GUI tests are so quick that the asynchronous user function call will be processed at the same time as the spin viewer window is being created, causing fatal segmentation faults in the test suite.
        * More robustness for the spin viewer GUI window prune_*() methods.  When no spin data exists, the self.tree.GetItemPyData(key) call can return None.  This is now being checked for and such None values are being skipped in the prune_mol(), prune_res() and prune_spin() methods.  The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
        * More robustness for the spin viewer GUI window update_*() methods.  When no spin data exists, the self.tree.GetItemPyData(key) call can return None.  This is now being checked for and such None values are being skipped in the update_mol(), update_res() and update_spin() methods.  The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
        * More robustness for the spin viewer GUI window prune_*() methods.  The data returned from the self.tree.GetItemPyData(key) call can in rare racing cases not contain the 'id' key.  This is now being checked for and are being skipped in the prune_mol(), prune_res() and prune_spin() methods.  The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
        * More robustness for the spin viewer GUI window update_*() methods.  The data returned from the self.tree.GetItemPyData(key) call can in rare racing cases not contain the 'id' key.  This is now being checked for and are being skipped in the update_mol(), update_res() and update_spin() methods.  The problem was found in the Mf.test_bug_20479_gui_final_pipe system test when running the command: for i in {1..10}; do ./relax --gui-tests --time -d &>> gui_tests.log; done
        * Created a development document for catching segfaults and other errors in the GUI tests.  This is needed as not all wxPython errors can be caught in the Python unittest framework.
        * Small whitespace formatting fix for the titles printed by the align_tensor.display user function.
        * Improvements for the plots created by the pcs.corr_plot user function.  The axes now have labels, and have the range and number of ticks set to reasonable values.
        * Improvements for the pcs.corr_plot user function - the plot range is now determined by the data.
        * Improvements for the rdc.corr_plot user function - the plot range is now determined by the data.
        * Added save state for testing implementation of error analysis.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Simplification of system test Relax_disp.test_task_7882_monte_carlo_std_residual, to just test the creation of Monte-Carlo data where errors are drawn from the reduced chi2 distribution.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Extension of the monte_carlo.create_data user function to draw errors from the reduced chi2 Gauss distribution as found by best fit.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Adding to backend of pipe_control.error_analysis(), to modify data point as error drawn from the reduced chi2 Gauss distribution.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Adding empty API method to return errors from the reduced chi2 distribution.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Added API function in relaxation dispersion to return error structure from the reduced chi2 distribution.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Temporary test of making a confidence interval as described in fitting guide.  This is system test Relax_disp.x_test_task_7882_kex_conf, which is not activated by default.  Running the test, interestingly shows, there is a possibility for a lower global kex.  But the value only differ from kex=1826 to kex=1813.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Change to system test Relax_disp.x_test_task_7882_kex_conf().  This is just a temporary system test, to check for local minima.  This is method in regression book of Graphpad: http://www.graphpad.com/faq/file/Prism4RegressionBook.pdf Page: 109-111.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Raising an error, if the R2eff model is used, and drawing errors from the fit.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * To system test Relax_disp.test_task_7882_monte_carlo_std_residual(), adding test for raise of errors, if the R2eff model is selected.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Added test of argument "distribution" in pipe_control.error_analysis.monte_carlo_create_data().  This is to make sure that a wrong argument is not passed into the function.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Extended the user function 'monte_carlo.create_data', to allow for the definition of the STD to use in Gauss distribution.  This is for creation of Monte-Carlo simulations, where one has perhaps gained information about the expected errors of the data points, which is not measured.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * In backend pipe_control.error_analysis.monte_carlo_create_data() added the argument 'fixed_error' to allow for fixed input of error to the Gauss distribution.  Inserted a range of checks, to make sure function behaves as expected.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Added to pipe_control.error_analysis.monte_carlo_create_data() the creation of data points for a fixed distribution.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * To system test Relax_disp.test_task_7882_monte_carlo_std_residual(), added tests for creation of Monte-Carlo data by different methods.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * In pipe_control.error_analysis.monte_carlo_create_data(), if data is of list type or ndarray, then modify the data point according to the fixed error if the distribution is set to 'fixed'.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Expanded the STD acronym, to the meaning of standard deviation.  This is in the user function 'monte_carlo.create_data'.  Task #7882 (https://gna.org/task/?7882): Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
        * Added a RelaxWarning printout to the dep_check module if wxPython 2.8 or less is encountered.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/7502.  The warning text is simply written to STDERR as relax starts.
        * Updated the wxPython version in the relax manual to be 2.9 or higher.  This is in the section http://www.nmr-relax.com/manual/Dependencies.html.
        * The GUI tests are now skipped for wxPython version <= 2.8 due to bugs causing fatal segfaults.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/7502.  These wxPython versions are simply too buggy.
        * Fix for the Relax_disp.test_bug_23186_cluster_error_calc_dw system test on 32-bit and Python <= 2.5 systems.
        * Better error handling in the structure.align user function.  If no common atoms can be found between the structures, a RelaxError is now raised for better user feedback.
        * Created an empty lib.sequence_alignment relax library package.  This may be used in the future for implementing more advanced structural alignments (the current method is simply to skip missing atoms, sequence numbering changes are not handled).
        * Added the sequence_alignment package to the lib package __all__ list.
        * Added the unit testing infrastructure for the new lib.sequence_alignment package.
        * Implementation of the Needleman-Wunsch sequence alignment algorithm.  This is located in the lib.sequence_alignment.needleman_wunsch module.  This is implemented as described in the Wikipedia article https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm.
        * Created a unit test for checking the Needleman-Wunsch sequence alignment algorithm.  This uses the DNA data from the example in the Wikipedia article at https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm.  The test shows that the implementation of the lib.sequence_alignment.needleman_wunsch.needleman_wunsch_align() function is correct.
        * Created the lib.sequence_alignment.substitution_matrices module.  This is for storing substitution matrices for use in sequence alignment.  The module currently only includes the BLOSSUM62 matrix.
        * Corrected the spelling of the BLOSUM62 matrix in lib.sequence_alignment.substitution_matrices.
        * Fix for the lib.sequence_alignment.substitution_matrices.BLOSUM62_SEQ string.
        * Modification of the Needleman-Wunsch sequence alignment algorithm implementation.  This is in the lib.sequence_alignment.needleman_wunsch functions.  Scoring matrices are now supported, as well as a user supplied non-integer gap penalty.  The algorithm for walking through the traceback matrix has been fixed for a bug under certain conditions.
        * Created the lib.sequence_alignment.align_protein module for the sequence alignment of proteins.  This general module currently implements the align_pairwise() function for the pairwise alignment of protein sequences.  It provides the infrastructure for specifying gap starting and extension penalties, choosing the alignment algorithm (currently only the Needleman-Wunsch sequence alignment algorithm as 'NW70'), and choosing the substitution matrix (currently only BLOSUM62).  The function provides lots of printouts for user feedback.
        * Created a unit test for lib.sequence_alignment.align_protein.align_pairwise().  This is to test the pairwise alignment of two protein sequences using the Needleman-Wunsch sequence alignment algorithm, BLOSUM62 substitution matrix, and gap penalty of 10.0.
        * Added more printouts to the Test_align_protein.test_align_pairwise unit test.  This is the test of the module _lib._sequence_alignment.test_align_protein.
        * Fix for the Needleman-Wunsch sequence alignment algorithm when the substitution matrix is absent.
        * The lib.sequence_alignment.align_protein.align_pairwise() function now returns data.  This includes both alignment strings as well as the gap matrix.
        * Annotated the BLOSUM62 substitution matrix with the amino acid codes for easy reading.
        * Updated the gap penalties in the Test_align_protein.test_align_pairwise unit test.  This is from the unit test module _lib._sequence_alignment.test_align_protein.
        * Modified the Needleman-Wunsch sequence alignment algorithm.  The previous attempt was buggy.  The algorithm has been modified to match the logic of the GPL licenced EMBOSS software (http://emboss.sourceforge.net/) to allow for gap opening and extension penalties, as well as end penalties.  No code was copied, rather the algorithm for creating the scoring and penalty matrices, as well as the traceback matrix.
        * Added a DNA similarity matrix to lib.sequence_alignment.substitution_matrices.
        * Added sanity checks to the Needleman-Wunsch sequence alignment algorithm.  The residues of both sequences are now checked in needleman_wunsch_align() to make sure that they are present in the substitution matrix.
        * Added the NUC 4.4 nucleotide substitution matrix from ftp://ftp.ncbi.nih.gov/blast/matrices/.  Uracil was added to the table as a copy to T.
        * Added the header from ftp://ftp.ncbi.nih.gov/blast/matrices/BLOSUM62.  This is to document the BLOSUM62 substitution matrix.
        * Added the PAM 250 amino acid substitution matrix.  This was taken from ftp://ftp.ncbi.nih.gov/blast/matrices/PAM250 and added to lib.sequence_alignment.substitution_matrices.PAM250.
        * Modified the Test_needleman_wunsch.test_needleman_wunsch_align_DNA unit test to pass.  This is from the unit test module _lib._sequence_alignment.test_needleman_wunsch.  The DNA sequences were simplified so that the behaviour can be better predicted.
        * Created the Test_needleman_wunsch.test_needleman_wunsch_align_NUC_4_4 unit test.  This is in the unit test module _lib._sequence_alignment.test_needleman_wunsch.  This tests the Needleman-Wunsch sequence alignment for two DNA sequences using the NUC 4.4 matrix.
        * Created a unit test for demonstrating a failure in the Needleman-Wunsch sequence alignment algorithm.  The test is Test_needleman_wunsch.test_needleman_wunsch_align_NUC_4_4b from the _lib._sequence_alignment.test_needleman_wunsch module.  The problem is that the start of the alignment is truncated if any gaps are present.
        * Fix for the Needleman-Wunsch sequence alignment algorithm.  The start of the sequences are no longer truncated when starting gaps are encountered.
        * The needleman_wunsch_align() function now accepts the end gap penalty arguments.  These are passed onto the needleman_wunsch_matrix() function.
        * Added the end gap penalty arguments to lib.sequence_alignment.align_protein.align_pairwise().
        * Created the Structure.test_align_CaM_BLOSUM62 system test.  This will be used for expanding the functionality of the structure.align user function to perform true sequence alignment via the new lib.sequence_alignment package.  The test aligns 3 calmodulin (CaM) structures from different organisms, hence the sequence numbering is different and the current structure.align user function design fails.  The structure.align user function has been expanded in the test to include a number of arguments for advanced sequence alignment.
        * Added support for the PAM250 substitution matrix to the protein pairwise sequence alignment function.  This is the function lib.sequence_alignment.align_protein.align_pairwise().
        * Bug fix for the Needleman-Wunsch sequence alignment algorithm.  Part of the scoring system was functioning incorrectly when the gap penalty scores were non-integer, as some scores were being stored in an integer array.  Now the array is a float array.
        * Created the Test_align_protein.test_align_pairwise_PAM250 unit test.  This is in the unit test module _lib._sequence_alignment.test_align_protein.  It checks the protein alignment function lib.sequence_alignment.align_protein.align_pairwise() together with the PAM250 substitution matrix.
        * Small docstring expansion for lib.sequence_alignment.align_protein.align_pairwise().
        * Added the sequence alignment arguments to the structure.align user function front end.  This includes the 'matrix', 'gap_open_penalty', 'gap_extend_penalty', 'end_gap_open_penalty', and 'end_gap_extend_penalty' arguments.  The 'algorithm' argument has not been added to save room, as there is only one choice of 'NW70'.  A paragraph has been added to the user function description to explain the sequence alignment part of the user function.
        * Added the sequence alignment arguments to the back end of the structure.align user function.  This is to allow the code in trunk to be functional before the sequence alignment before superimposition has been implemented.
        * Removed the 'algorithm' argument from the Structure.test_align_CaM_BLOSUM62 system test script.  This is for the structure.align user function.  The argument has not been implemented to save room in the GUI, and as 'NW70' is currently the only choice.
        * The sequence alignment arguments are now passed all the way to the internal structural object backend.  These are the arguments of the structure.align user function.
        * Created the lib.sequence.aa_codes_three_to_one() function.  The lib.sequence module now contains the AA_CODES dictionary which is a translation table for the 3 letter amino acid codes to the one letter codes.  The new aa_codes_three_to_one() function performs the conversion.
        * Implemented the internal structural object MolContainer.loop_residues() method.  This generator method is used to quickly loop over all residues of the molecule.
        * Implemented the internal structural object one_letter_codes() method.  This will create a string of one letter residue codes for the given molecule.  Only proteins are currently supported.  This method uses the new lib.sequence.aa_codes_three_to_one() relax library function.
        * Sequence alignment is now performed in lib.structure.internal.coordinates.assemble_coord_array().  This is a pairwise alignment to the first molecule of the list.  The alignments are not yet used for anything.  The assemble_coord_array() function is used by the structure.align user function, as well as a few other structure user functions.
        * Fix for the lib.sequence.aa_codes_three_to_one() function.  Non-standard residues are now converted to the '*' code.  The value of 'X' prevents any type of alignment of a stretch of X residues as X to X in both the BLOSUM62 and PAM250 substitution matrices are set to -1.
        * Modified the gap penalty arguments for the structure.align user function.  These now must always be supplied, as None is not handled by the backend lib.sequence_alignment.needleman_wunsch module.  The previous defaults of None are now set to 0.0.
        * Updated the artificial diffusion tensor test suite data.  This is the data in test_suite/shared_data/diffusion_tensor.  The residues in the PDB files are now proper amino acids, so the HETATM records are now ATOM records, and the CONECT records have been eliminated.
        * Another update for the artificial diffusion tensor test suite data.  The number of increments on the sphere has been increased from 5 to 6, to make the vector distribution truly uniform.  All PDB files and relaxation data has been updated.
        * Changed the synthetic PDB for the artificial diffusion tensor test suite data.  The nitrogen and proton positions are now shifted 10 Angstrom along the distribution vectors.  This is to avoid having all nitrogens positioned at the origin which causes the internal structural object algorithm for determining which atoms are connected to fail.
        * Reintroduced the CONECT PDB records into the artificial diffusion tensor test suite data.  The uniform vector distributions have overlapping vectors.  This causes the internal structural object atom connection determining algorithm to fail, as this is distance-based rather than using the PDB amino acid definitions for now.
        * Updates for the Structure.test_create_diff_tensor_pdb_sphere system test.  The test now uses the sphere synthetic relaxation data rather than the ellipsoid data, and the PDB checking has been updated for the new data.
        * Updates for the Structure.test_create_diff_tensor_pdb_prolate system test.  The test now uses the spheroid synthetic relaxation data rather than the ellipsoid data, and the PDB checking has been updated for the new data.
        * Updates for the Structure.test_create_diff_tensor_pdb_oblate system test.  The test now uses the spheroid synthetic relaxation data rather than the ellipsoid data, and the PDB checking has been updated for the new data.  The oblate tensor is now forced in the system test script.
        * Updates for the Structure.test_create_diff_tensor_pdb_ellipsoid system test.  The PDB checking has been updated for the new data.
        * Updated the Structure.test_delete_atom system test for the changed PDB structures.  The test_suite/shared_data/diffusion_tensor/spheroid/uniform.pdb file now has more residues, and the atomic positions are different.
        * Updated the Structure.test_align system test for the changed PDB structures.  The test_suite/shared_data/diffusion_tensor/spheroid/uniform.pdb file now has more residues, and the atomic positions are different.
        * Updated the Structure.test_align_molecules system test for the changed PDB structures.  The test_suite/shared_data/diffusion_tensor/spheroid/uniform.pdb file now has more residues, and the atomic positions are different.
        * Python 3 fix for the lib.sequence module.  The string.upper() function no longer exists.
        * Python 3 fix for the lib.sequence_alignment.align_protein module.  The string.upper() function no longer exists.
        * Modified the generate_data.py diffusion tensor to relaxation data creation script.  The NH vectors are no longer truncated to match the PDB.
        * Python 3 fix for the generate_data.py diffusion tensor to relaxation data creation script.  The string.upper() function no longer exists.
        * Reintroduced the simulated PDB truncation into the artificial diffusion tensor test suite data.  This is different to the previous implementation which was deleted recently.  It now simulates the truncation of both the N and H positions in the PDB and reconstructs the expected vector.
        * Updates for some of the Structure.test_create_diff_tensor_pdb_* system tests.  This includes Structure.test_create_diff_tensor_pdb_ellipsoid, Structure.test_create_diff_tensor_pdb_oblate, and Structure.test_create_diff_tensor_pdb_prolate.  The new simulated PDB truncation in the test data causes the PDB files created in these tests to be slightly different.
        * The pairwise sequence alignment is now active in the structure.align user function.  This is implemented in the lib.structure.internal.coordinates.assemble_coord_array() function for assembling atomic coordinates.  It will also automatically be used by many of the structure user functions which operate on multiple structures.  The atomic coordinate assembly logic has been completely changed.  Instead of grouping atomic information by the molecule, it is now grouped per residue.  This allows the residue based sequence alignments to find matching coordinate information.  The assemble_coord_array() function will also handle the algorithm argument set to None and assume that the residue sequences are identical between the structures, but this should be avoided.  A new function, common_residues() has been created as a work-around for not having a multiple sequence alignment implementation.  It will take the pairwise sequence alignment information and construct a special data structure specifying which residues are present in all structures.  The logic for skipping missing atoms remains in place, but it now operates on the residue rather than molecule level and simply uses the atom name rather than atom ID to identify common atoms.
        * Changed the gap opening penalty to 10 in the N-state model structure_align.py system test script.
        * Docstring update for the pipe_control.structure.main.assemble_coordinates() function.  This is for the algorithm argument which can now be set to None.
        * Fix for the sequence alignment for assembling atomic coordinates.  This caused the Structure.test_superimpose_fit_to_mean system test to fail.  The problem was in the new logic of the lib.structure.internal.coordinates.assemble_coord_array() function.  The coordinate assembly now terminates when either the end of the first molecule or the current molecule is reached.
        * Bug fixes for the new lib.structure.internal.coordinates.common_residues() function.  This function for determining the common residues between multiple sets of pairwise alignments was failing in quite a number of cases.  The logic has been updated to handle these.
        * Another fix for the lib.structure.internal.coordinates.common_residues() function.  The wrong index was being used to skip residues in the second sequence.
        * Created the Structure.test_pdb_combined_secondary_structure system test.  This is used to demonstrate a problem in the handling of secondary structure metadata when combining multiple PDB structures.  It appears as if the chain ID is preserved as the original ID and is not updated to match the new IDs in the output PDB.
        * Updated the Structure.test_metadata_xml system test for the changed PDB metadata handling.  The helix and sheets IDs are now molecule indices.
        * Disabled the General.test_bug_23187_residue_delete_gui GUI test.  This is essential as a wxPython bug in Mac OS X systems causes this test to trigger a 'Bus Error' every time the GUI tests are run, killing relax.


    Bugfixes:
        * Bug fix for the lib.arg_check.is_int_list() function for checking a list of lists.  This is used to check user function arguments, but was causing a RelaxError to be raised for all integer list of lists user function arguments when a valid value is supplied.  The function has been updated to match the is_str_list() function which does not suffer from this bug.
        * Fix in dispersion API, to set error value for clustered values.  Bug #23186 (https://gna.org/bugs/index.php?23186): Error calculation of individual parameter "dw" from Monte-Carlo, is based on first spin.
        * Fix for bug #23187 (https://gna.org/bugs/?23187).  This is the problem whereby opening the spin viewer window, deleting a residue, and then reopening the spin viewer crashes relax.  This change completes the spin viewer update_*() functions.  The prune_list variable was initialised but not used.  Now it is used to store the keys of the items to delete, and then the items are deleted at the end in a new loop so that the loop over the dictionary keys is not corrupted.
        * Fix for the rdc.corr_plot user function.  The Y-axis is now set to the measured RDC, as the RDC errors are plotted as dY errors.  This matches the behaviour of the pcs.corr_plot user function.
        * Bug fix for the printouts from the relax_data.read user function.  This problem was introduced in the last relax release.  The problem is that the spin ID in the loaded relaxation data printout is the same for all data, being the spin ID of the first spin.  This has no effect on how relax runs, it is only incorrect feedback.
        * Bug fix for the PDB secondary sheet handling when combining multiple PDB structures.  The helix and sheet metadata now converts the original chain IDs into molecule indices, shifted to new values based on the currently loaded data, when the structure.read_pdb user function is executed.  When the structure.write_pdb user function is executed, the molecule indices are converted into new chain IDs.  This allows the chain IDs in the HELIX and SHEET records to match those of the ATOM and HETATOM records.
        * Bug fix for the structure.read_pdb user function parsing of CONECT records.  CONECT records pointing to ATOM records were not being read by the user function.  As ATOM records should not require CONECT records by their definition, this is only a minor problem affecting synthetic edge cases.



Version 3.3.4
(3 December 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.4

    Features:
        * Numerous improvements for the relax_fit.select_model user function.
        * Support for the saturation recovery experiment in the relaxation exponential curve-fitting analysis.
        * Support for the inversion recovery experiment in the relaxation exponential curve-fitting analysis.
        * Added a section to the start of the relaxation curve-fitting chapter of the manual to include descriptions of all supported models.
        * Addition of a button to the R1 and R2 GUI analyses for selecting the desired exponential curve model via the relax_fit.select_model user function.


    Changes:
        * Small updates for the wiki section of the release checklist document.
        * Fixes for the links at the bottom of all HTML manual pages.  This is for the automatically generated documentation at http://www.nmr-relax.com/manual/index.html, created using latex2html.  The links all require double quotes, and some a trailing '/'.  The links fixed are http://www.nmr-relax.com, http://www.nmr-relax.com/manual/ and http://download.gna.org/relax/manual/relax.pdf.
        * Removed the repository backup file text from the relax manual.  This is for http://www.nmr-relax.com/manual/Latest_sources_the_relax_repositories.html.  The gzipped repository dump file has not been created by Gna! for many, many years.  The problem was identified by the W3C link checker (http://validator.w3.org/checklink).
        * Updated all of the http://www.nmr-relax.com/manual/ links in the lib.dispersion package.  This is for all of the individual model pages in the HTML manual.
        * Improved the description for the relax_fit.select_model user function.
        * A small code rearrangement to create the new target_functions.relax_fit_wrapper module.  This follows from the idea at https://gna.org/task/?7415#comment6.  The *func_wrapper() functions of the specific_analyses.relax_fit.optimisation module have been shifted out and converted to class methods to create the target_functions.relax_fit_wrapper module.  This will be used to abstract away all of the C code, and will form the infrastructure to allow new exponential curves to be quickly supported.  The modules of the specific_analyses.relax_fit and specific_analyses.relax_disp packages now import the target_functions.relax_fit_wrapper.Relax_fit_opt target function class and use that instead.
        * Shifted the C code Jacobian functions into the new target_functions.relax_fit_wrapper module.  This shifts all of the relaxation curve-fitting C code access into the target_functions.relax_fit_wrapper module so that the rest of relax does not need to handle the C code.  This will allow for new models to be very easily supported, as they would all be set up in this target function module.
        * Updated the formula in the description of the relax_fit.select_model user function.
        * Modified the printouts from the structure.write_pdb user function if models are present.  Instead of printing out 'MODEL', 'ATOM, HETATM, TER' and 'ENDMDL' for each model, the header 'MODEL records' is printed followed by a single '.' character for each model.  For structures with many models, this results in a huge speed up of the user function which is strongly limited by how fast the terminal can display text.
        * Added the synthetic saturation-recovery data in the form of Sparky peak lists to the repository.  These files were created by Andras Boeszoermenyi.  They are attached to the task at http://gna.org/task/?7415 as the Relax_sym.tar.gz file at http://gna.org/task/download.php?file_id=22989.  They were created for the formula I0*(1 - exp(−R1*t)) where I0 = 1000000000000000.00 and R1 = 0.5.  These files and the associated relax_sim.py script (which needs to be updated for the latest relax version) could form the basis of a basic system test.  This system test could then be used to implement the saturation-recovery experiment equations in relax.
        * Updated the target_functions package __all__ list to include the relax_fit* modules.
        * Modified the package __all__ list checking unit test to accept *.so C modules.
        * Removal of an unused import in the relax_fit_zooming_grid.py system test script.
        * Added a system test script for testing the saturation-recovery R1 experiment.  This was created by Andras Boeszoermenyi.  The file was taken from the saturation_recovery.tar.gaz file (https://gna.org/task/download.php?file_id=22997) are attached to the task at http://gna.org/task/?7415.  The only difference with the original script is that the grace.view user function calls have been removed, as these cannot be used in a system test.
        * Modified the relax_fit_saturation_recovery.py script to work as a system test.  This is the script from Andras Boeszoermenyi.  The change follows from the discussion of http://thread.gmane.org/gmane.science.nmr.relax.devel/7308/focus=7369.  The status.install_path variable is now used to point to the location of the files.  The relax data store ds.tmpdir variable is used for outputting all files.  And commented out user functions have been deleted.
        * Added a copyright notice for Andras Boeszoermenyi for the newly added saturation-recovery R1 script.  This change follows the discussion in the message http://thread.gmane.org/gmane.science.nmr.relax.devel/7308/focus=7369.
        * Created the Relax_fit.test_saturation_recovery system test.  This follows from the discussion of http://thread.gmane.org/gmane.science.nmr.relax.devel/7308/focus=7369.
        * Added the saturation recovery experiment to the relax_fit.select_model user function.  This simply adds a new option and sets up a different parameter set [Rx, Iinf].
        * Modified the Relax_fit.test_saturation_recovery system test script.  The relax_fit.select_model user function call now selects the 'sat' model.
        * Fix for the relax_fit.select_model user function backend for the 'sat' model.
        * The exponential model name is now being passed into the target function class.  The model as specified by the relax_fit.select_model user function is now finally being sent into the target function, in this case the Relax_fit_opt class in target_functions.relax_fit_wrapper.
        * Small fix for the relax_fit.select_model user function.
        * Renamed all of the relaxation curve-fitting target functions.  This includes all of the C functions which are model specific, by appending '_exp' to the current names to now be func_exp, dfunc_exp, d2func_exp, jacobian_exp, and jacobian_chi2_exp.  And all of the Relax_fit_opt target function class *_wrapper() methods to *_exp().  The target function class is now only aliasing the *_exp() methods when the model is set to 'exp'.
        * Alphabetical ordering of the C function imports in the target_functions.relax_fit_wrapper module.
        * Modified the relax_fit.test_saturation_recovery system test to check for Iinf instead of I0.
        * Added support for the saturation recovery experiment to parameter disassembly function.  This is in the disassemble_param_vector() function of the specific_analyses.relax_fit.parameters module.  This function requires each experiment to be handled separately.
        * Implemented the target functions for the saturation recovery exponential curve.  In the Python target function class Relax_fit_opt, the new func_sat(), dfunc_sat() and d2func_sat() methods have been created as wrappers for the new C functions.  These are aliased to func(), dfunc() and d2func() in the __init__() method.  In the target_functions/exponential.c C file, the functions exponential_sat(), exponential_sat_dIinf(), exponential_sat_dR(), exponential_sat_dIinf2(), exponential_sat_dR_dIinf() and exponential_sat_dR2() have been created to implement the function, gradient, and Hessian for the equation I = Iinf * (1 - exp(-R.t)).  In the target_functions/relax_fit.c file, the functions func_sat(), dfunc_sat(), d2func_sat(), jacobian_sat() and jacobian_chi2_sat() have been created as duplications of the *_exp() functions, but pointing to the exponential_sat*() functions and using Iinf instead of I0.
        * Split the saturation recovery exponential equations and partial derivatives into their own C file.
        * Expansion and improvements for the relax_fit.select_model user function documentation and printouts.
        * The relax_fit.relax_time and relax_fit.select_model user functions now have wizard graphics.  The R1 graphic from graphics/analyses/r1_200x200.png is now being used.
        * Added support for the inversion recovery experiment to parameter disassembly function.  This matches the change for the saturation recovery experiment.  This is in the disassemble_param_vector() function of the specific_analyses.relax_fit.parameters module.  This function requires each experiment to be handled separately.
        * Expanded the relax_fit_saturation_recovery.py system test script.  This now calls the error_analysis.covariance_matrix user function to test that code path.
        * Updated the relaxation curve-fitting covariance_matrix() API method to handle all models.  The check for the 'exp' model type has been eliminated, and the parameter vector is assembled using the flexible assemble_param_vector() function rather than manually constructing the vector.
        * The errors in the Relax_fit.test_saturation_recovery system test are now reasonable.  They have been set to 5% of Iinf so that the chi-squared value during optimisation is more realistic.
        * Updated the relaxation curve-fitting get_param_names() API method to handle all models.  This now simply returns the spin container 'params' list, allowing all models to be properly supported.
        * Big bug fix for the error_analysis.covariance_matrix user function.  The model_info structure is now being passed into the get_param_names() API method, as required by the API.
        * Another change for the relaxation curve-fitting covariance_matrix() API method to handle all models.  The scaling matrix diagonalised list of 1.0 values now has the same number of elements as there are parameters.
        * Implemented the target functions for the inversion recovery exponential curve.  In the Python target function class Relax_fit_opt, the new func_inv(), dfunc_inv() and d2func_inv() methods have been created as wrappers for the new C functions.  These are aliased to func(), dfunc() and d2func() in the __init__() method.  The target_functions/exponential_inv.c C file has been created with the functions exponential_inv(), exponential_inv_d0(), exponential_inv_dIinf(), exponential_inv_dR(), exponential_inv_dI02(), exponential_inv_dIinf2(), exponential_inv_dI0_dIinf(), exponential_inv_dR_dI0(), exponential_inv_dR_dIinf() and exponential_inv_dR2() have been created to implement the function, gradient, and Hessian for the equation I(t) = Iinf - I0*exp(-R.t).  In the target_functions/relax_fit.c file, the functions func_inv(), dfunc_inv(), d2func_inv(), jacobian_inv() and jacobian_chi2_inv() have been created as duplications of the *_exp() functions, but pointing to the exponential_inv*() functions and adding the Iinf dimension.
        * More editing of the relax_fit.select_model user function.  The IR and SR abbreviations have been added, and a lot of text cleaned up.
        * Improvement for the relax_fit.select_model user function in the GUI.  Unicode text is now being used to display the parameters as R_x and I_0 and to show an infinity symbol in the Iinf parameter.  The Rx and Iinf parameters have been added to lib.text.gui to allow this.
        * Expanded the relaxation curve-fitting chapter of the manual to include descriptions of the models.  A new section at the start of this chapter has been added to explain the different models and their equations.  This was taken from the script mode section and expanded to include the new saturation recovery experiment.
        * Removed the relax_fit.select_model user function call from the relax_fit auto-analysis.  This is to allow the user in a script, or in the GUI, to choose the model themselves.
        * Added a button to the R1 and R2 GUI analyses for executing the relax_fit.select_model user function.  This is just after the peak list GUI element and before the optimisation settings.  It allows different curve types to be selected for the analysis.
        * Created the new specific_analyses.relax_fit.checks module.  This creates the check_model_setup Check object, following the check_*() function design at http://wiki.nmr-relax.com/Relax_source_design#The_check_.2A.28.29_functions.  This will be used to make sure that the exponential curve model is set prior to executing certain user functions.
        * Improved the checking in the relaxation curve-fitting analysis.  The new specific_analyses.relax_fit.checks.check_model_setup() function is now called prior to minimisation and in the get_param_names() API method to prevent Python errors from occurring due to missing data structures.  In addition, the pipe_control.mol_res_spin module function exists_mol_res_spin_data() has been replaced with check_mol_res_spin_data().
        * Fix for the recently broken Relax_fit.test_curve_fitting_height_estimate_error system test.  The relax_fit.select_model user function is now called as this is no longer performed in the auto-analysis.
        * Removed the text that the inversion recovery experiment is not implemented yet.  This is in the documentation for the relax_fit.select_model user function and is in preparation for completing this.
        * Added the checks module to the specific_analyses.relax_fit package __all__ list.
        * Fixes for the relaxation dispersion analysis for the recent relaxation curve-fitting analysis changes.  The Relax_fit_opt target function class requires the model argument to be supplied to be correctly set up.
        * Fixes for the unit tests of the target_functions.relax_fit C module.  This is for the recent renaming of all the C functions based on the model type.
        * Fix for the Rx.test_r1_analysis GUI test.  A click on the relax_fit.select_model user function button is now being simulated.
        * Created a directory for holding synthetic inversion recovery R1 data.
        * Copied synthetic inversion recovery Sparky peak lists from Sébastien Morin's inversion-recovery branch.
        * Created a system test script for the inversion-recovery function.  This is based on a copy of the script 'relax_fit_exp_2param_neg.py'.

        * The 3-parameter curve fitting test script now uses the corresponding peak lists.
        * Prepared the "exp_3param" test for inclusion of artificial data.
        * Added missing delays in the list.  The duplicates had been omitted...
        * Manually fix the script based on changes made during branch updating.  This is as discussed by Edward d'Auvergne in a post at https://mail.gna.org/public/relax-devel/2012-01/msg00001.html.
        * Updated Séb's relax_fit_exp_3param_inv_neg.py system test script to work with the current relax design.
        * Added a script for calculating the expected peak intensities for an inversion recovery curve.  This is based on the values used by Sébastien Morin in his inversion-recovery branch, as the check_curve_fitting_exp_3param_inv_neg() function of the test_suite/system_tests/relax_fit.py file.
        * Increased the precision of the printout from the calc.py script of the last commit.
        * Changed the peak intensities for Gly 4 in the synthetic inversion recovery Sparky lists.  The values have been changed to match that determined from the calc.py script.  The replicate spectra intensities are simply the calculated intensity +/-1, to preserve the average.
        * Created the Relax_fit.test_inversion_recovery system test.  This simply calls Sébastien Morin's relax_fit_exp_3param_inv_neg.py system test script, ported from the inversion-recovery branch, and then checks the parameter values for the single optimised spin.
        * Updated the manual_c_module.py C module compilation development script for the recent changes.  The exponential_inv.c and exponential_sat.c files need to be compiled as well.
        * Python 3 fix for the relax_fit_exp_3param_inv_neg.py system test script.  The xrange() function does not exist in Python 3, so was replaced by range().
        * Updated the memory_leak_test_relax_fit.py development script for the C module changes.  This is only the docstring description which changed.
        * Epydoc docstring fixes for the lib.io module - keyword arguments were not correctly identified.  These were identified by Troels in the post at http://thread.gmane.org/gmane.science.nmr.relax.scm/24565/focus=7384.
        * Created the State.test_bug_23017_ieee_754_multidim_numpy_arrays system test.  This is to catch bug #23017 (https://gna.org/bugs/?23017), the multidimensional numpy arrays are not being stored as IEEE 754 arrays in the XML state and results files.  This test checks a rank-2 float64 numpy array stored in the current data pipe against what the IEEE 754 int list should be for it.
        * Grammar fix for a warning from the pymol.display user function.


    Bugfixes:
        * Bug fix for the pymol.view user function for when no PDB file exists.  The pymol.view user function would fail with an AttributeError when the currently loaded data does not exist as a PDB file.  This is now caught and the non-existent PDB is no longer displayed.  A better solution might be to dump all the current structural data into a temporary file and load that, all within a try-finally statement to be sure to delete the temporary file.  This solution may not be what the user is interested in anyway.
        * Simple fix for bug #23017 (https://gna.org/bugs/?23017).  This is the multidimensional numpy arrays are not being stored as IEEE 754 arrays in the XML state and results files.  The problem was a relatively recent regression caused by a change to the is_float_matrix() function of the lib.arg_check module.  It was simply that the default dims keyword argument value was changed from None to (3, 3).  Therefore any call to the function without supplying the dims argument would fail if the matrix was not of the (3, 3) shape.



Version 3.3.3
(24 November 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.3

    Features:
        * Implemented the lib.geometry.vectors.vector_angle_atan2() relax library function.  This is for calculating the inter-vector angle using the more numerically stable atan2() formula.
        * Implemented the lib.geometry.vectors.vector_angle_acos() relax library function.  This is used to calculate the inter-vector angle using the arccos of the dot product formula.  The function has been introduced into the relax library as the calculation is repeated throughout relax.
        * Expanded the basis sets for the align_tensor.matrix_angles user function to allow the correct inter-tensor angles to be calculated.  This includes the standard inter-matrix angles via the arccos of the Euclidean inner product of the alignment matrices in rank-2, 3D form divided by the Frobenius norm of the matrices, irreducible spherical tensor 5D basis set {A-2, A-1, A0, A1, A2}, and the unitary 9D basis set {Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz} (all of which produce the same result).
        * Expanded the basis sets for the align_tensor.svd user function to allow the correct singular values and condition number to be calculated.  This includes the irreducible spherical tensor 5D basis set {A-2, A-1, A0, A1, A2} and the unitary 9D basis set {Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz} (both of which produce the same result).
        * Added the angle_units and precision arguments to the align_tensor.matrix_angles user function to allow either degrees or radians to be output and the number of decimal points to be specified.
        * Added the precision argument to the align_tensor.svd user function to allow the number of decimal points for the singular values and condition number to be specified.
        * Updated the align_tensor.display user function to output the irreducible spherical harmonic weights.  This is the alignment tensor in the {A-2, A-1, A0, A1, A2} notation.


    Changes:
        * Basic Epydoc fix for the data_store.exp_info module.
        * Epydoc fix for the name_pipe() method of the relaxation dispersion auto-analysis for repeated data.
        * Fixes for the HTML user manual compilation.  The index.html file was not being created as the main page has changed from 'relax_user_manual.html' to 'The_relax_user_manual.html'.
        * Added a line to the release checklist document about updating the wiki release links.  These are for the combined release notes pages at http://wiki.nmr-relax.com/Relax_releases, http://wiki.nmr-relax.com/Relax_release_descriptions, http://wiki.nmr-relax.com/Relax_release_metadata, http://wiki.nmr-relax.com/Relax_release_features, http://wiki.nmr-relax.com/Relax_release_changes, http://wiki.nmr-relax.com/Relax_release_bugfixes, http://wiki.nmr-relax.com/Relax_release_links.
        * Updates for the release announcement section of the release checklist document.
        * Created a system test to catch a rare relaxation data loading problem.
        * Created the Mf.test_dauvergne_protocol_sphere system test.  This catches bug #22963 (https://gna.org/bugs/?22963):  Using '@N*' to define the interatomic interactions for a model-free analysis fails when using non-backbone 15N spins.
        * Set more reasonable default values for the lib.structure.pdb_write functions atom() and hetatm().  The occupancy now defaults to 1.0 instead of '', and the temperature factor to 0.0 instead of ''.  This avoid painful errors when using these functions, as these arguments must be floating point numbers at all times, hence the default value of '' causes a TypeError.
        * Updated the PDB file in the test_suite/shared_data/model_free/sphere/ directory.  The relax library is now being used to create the PDB file.  Additional TER and CONECT records are now being created so the result is a more correct PDB file.
        * Converted all ATOM records to HETATM in the sphere.pdb file.
        * Renamed vector_angle() to vector_angle_normal() in the lib.geometry.vectors module.  This is to standardise the naming as there are now the standard vector angle formula implemented as the vector_angle_acos() and vector_angle_atan2() functions.
        * Added 6 unit tests for the lib.geometry.vectors.vector_angle_acos() function.  These are similar to those of the vector_angle_normal() function but unsigned angles are checked for.
        * Created 6 unit tests for the lib.geometry.vectors.vector_angle_atan2() function.
        * Created a script and log file to demonstrate differences between alignment tensor basis sets.  This shows that the inter-tensor angles and condition numbers are dependent on the basis set used.
        * Improved the printouts from the align_tensor.svd user function by including the basis set text.
        * Updated the log file for comparing different alignment tensor basis sets for align_tensor.svd changes.
        * Implemented a new default basis set for the align_tensor.matrix_angles user function.  This is uses standard definition of the inter-matrix angle using the Euclidean inner product of the two matrices divided by the product of the Frobenius norm of each matrix.  As this is a linear map, it should produce the correct definition of inter-tensor angles.
        * Improvements to the description of the align_tensor.matrix_angles user function.
        * Updated the test_matrix_angles_identity() unit test for pipe_control.align_tensor.matrix_angles().  This is the test in the _prompt.test_align_tensor.Test_align_tensor module.  The basis set has been set back to the now non-default value of 0, and the value checks have been converted from assertEqual() to assertAlmostEqual() to allow for small truncation errors.
        * Conversion of the basis_set argument for the align_tensor.matrix_angles user function.  The argument is now a string that accepts the values of 'matrix', 'unitary 5D', and 'geometric 5D' to select between the different matrix angles techniques.  This has been updated in the test suite as well.
        * Added a check for the values of the basis_set argument.  This is to the align_tensor.matrix_angles user function backend.
        * Printout improvements clarifying the align_tensor.matrix_angles user function.
        * Conversion of the basis_set argument for the align_tensor.svd user function.  The argument is now a string that accepts the values of 'unitary 9D', 'unitary 5D', and 'geometric 5D' to select between the different SVD matrices.  This has been updated in the test suite as well.
        * Expanded the N_state_model.test_5_state_xz system test.  This now covers the new 'unitary 9D' basis set for the align_tensor.svd user function and the new 'matrix' basis set for the align_tensor.matrix_angles user function.
        * Expansion of the align_tensor.matrix_angles user function.  The new basis set 'unitary 9D' has been introduced.  This creates vectors as {Sxx, Sxy, Sxz, Syx, Syy, Syz, Szx, Szy, Szz} and computes the inter-vector angles.  These match the 'matrix' basis set whereby the Euclidean inner product divided by the Frobenius norms is used to calculate the inter-tensor angles.  In addition, the user function documentation and printouts have been improved.  And the backend code has been simplified.
        * Updated the script and log file for demonstrating differences between alignment tensor basis sets.  This now handles the changes to the basis_set arguments used in the align_tensor.matrix_angles and align_tensor.svd user functions, and includes the new basis sets.
        * Added the irreducible tensor notation of {A-2, A-1, A0, A1, A2} to the alignment tensor object.  This follows from the definition of Sass et al, J. Am. Chem. Soc. 1999, 121, 2047-2055, http://dx.doi.org/10.1021/ja983887w.  The equations of (2) were converted using Gaussian elimination to obtain a reduced row echelon form, so that the equations in terms of {A-2, A-1, A0, A1, A2} were derived.  These have been coded into the alignment tensor object calc_Am2, calc_Am1, calc_A0, calc_A1 and calc_A2 methods respectively, and the values can be obtained by accessing the Am2, Am1, A0, A1, and A2 objects.  To check that the implementation is correct, a unit test has been created to compare the calculated values with those determined using Pales.
        * Expanded the unit test of the alignment tensor {A-2, A-1, A0, A1, A2} parameters to cover all values.
        * Created functions in the relax library for calculating the inter-vector angle for complex vectors.  This is in the lib.geometry.vectors module.  The function vector_angle_complex_conjugate() has been created to calculate the angle between two complex vectors.  This uses the new auxiliary function complex_inner_product() to calculate <v1|v2>.
        * Added the 'irreducible 5D' basis set option to the align_tensor.matrix_angles user function.  This is for the inter-tensor vector angle for the irreducible 5D basis set {S-2, S-1, S0, S1, S2}.  Its results match that of the standard tensor angle as well as the 'unitary 9D' basis sets.
        * Added the 'irreducible 5D' basis set option to the align_tensor.svd user function.  This is for the inter-tensor vector angle for the irreducible 5D basis set {A-2, A-1, A0, A1, A2}.  Its results match that of the 'unitary 9D' basis set.
        * Editing of the description for the 'irreducible 5D' alignment tensor basis set.  This is for the align_tensor.matrix_angles and align_tensor.svd user functions.  All Sm element have been converted to Am.
        * Editing of the description for the align_tensor.matrix_angles user function.
        * Editing of the align_tensor.svd user function description.
        * Updated the script and log file for demonstrating differences between alignment tensor basis sets.  The 'irreducible 5D' basis set in now used for both the align_tensor.matrix_angles and align_tensor.svd user functions.
        * Fix for a spelling mistake in the align_tensor.matrix_angles user function printouts.
        * Small fix for the align_tensor.matrix_angles user function documentation.
        * Expanded the N_state_model.test_5_state_xz system test for more alignment tensor basis sets.  The align_tensor.matrix_angles and align_tensor.svd user functions are now being called with the additional 'irreducible 5D', and 'unitary 9D' basis sets, to make sure these work correctly.
        * Created the Align_tensor.test_align_tensor_matrix_angles system test.  This is to check the angles calculated by the align_tensor.matrix_angles user function.  As there are no external references, this essentially fixes the angles to the currently calculated values to catch any accidental changes in the future.
        * Created the Align_tensor.test_align_tensor_svd system test.  This is to check the angles calculated by the align_tensor.svd user function.  As there are no external references, this essentially fixes the singular values and condition numbers to the currently calculated values to catch any accidental changes in the future.
        * Fixes for the proportions of the align_tensor.matrix_angle user function GUI wizard.
        * Expanded the 'irreducible 5D' text in the align_tensor.matrix_angles and align_tensor.svd user functions.  This now explains that these are the coefficients for the spherical harmonic decomposition.
        * Improved the text for the irreducible tensor notation in the align_tensor.display user function.
        * Formatting fix for the magnetic susceptibility tensor part of the align_tensor.display user function.
        * More improvements for the align_tensor.matrix_angles user function description.
        * Epydoc docstring fixes and expansion for the lib.io.sort_filenames() function.
        * Epydoc docstring fixes for the lib.spectrum.nmrpipe module.  This is for the API documentation at http://www.nmr-relax.com/api/index.html.  The show_apod_rmsd_to_file() and show_apod_rmsd_dir_to_files() function docstrings have both been modified.
        * Epydoc docstring fixes for the pipe_control.opendx.map() function.  This is for http://www.nmr-relax.com/api/3.3/pipe_control.opendx-module.html#map.  The fixes include whitespace and textwrapping changes.
        * Python 2.5 fix for the align_tensor.display user function.  The new irreducible spherical tensor coefficient printout was failing as the float.real variable was introduced from Python 2.6 onwards.
        * Shifted the structure checks into their own module.  This shifts the special check_structure Check object from pipe_control.structure.main into the new checks module.  It allows the check to be performed by other modules in the pipe_control.structure package.
        * Added the missing_error keyword argument to the pipe_centre_of_mass() function.  This is from the pipe_control.structure.mass module.  The new keyword controls what happens with the absence of structural data.  The pipe_control.structure.checks.check_structure() function is now being used to either throw a warning and return [0, 0, 0] or to raise a RelaxError.
        * Fix for the new unit tests - Python 2.5 floats do not have a 'real' property.


    Bugfixes:
        * Fix for bug #22961 (https://gna.org/bugs/?22961), the failure of relaxation data loading with the message "IndexError: list index out of range".  The bug was found by Julien Orts.  It is triggered by loading relaxation data from a file containing spin name information and supplying the spin ID using the spin name to restrict data loading to a spin subset.  To solve the problem, the pipe_control.relax_data.pack_data() function has been redesigned.  Now the selection union concept of Chris MacRaild's selection object is being used by joining the spin ID constructed from the data file and the user supplied spin ID with '&', and using this to isolate the correct spin system.
        * Big Python 3 bug fix for the dep_check module for the detection of the NMRPipe showApod software.  The showApod program was falsely detected as always not being present when using Python 3.  This is because the output of the program was being tested using string comparisons.  However the output from programs obtained from the subprocess module is no longer strings but rather byte-arrays in Python 3.  Therefore the byte-array is not being converted to text if Python 3 is being used, allowing the showApod software to be detected.
        * Python 3 bug fix for the lib.spectrum.nmrpipe.show_apod_extract() function.  The subprocess module output from the showApod program, or any software, is a byte array in Python 3 rather than text.  This is now detected and the byte array converted to text before any processing.
        * Bug fix for the lib.structure.angles.angles_*() functions for odd increments.  This affects the PDB representations of the diffusion tensor and frame order when the number of increments in the respective user functions is set to an odd number.  It really only affects the frame_order.pdb_model user functions, as the number of increments cannot be set in any of the other user functions (structure.create_diff_tensor_pdb, structure.create_rotor_pdb, structure.create_vector_dist, n_state_model.cone_pdb).



Version 3.3.2
(13 November 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.2

    Features:
        * Many improvements for the HTML version of the manual at http://www.nmr-relax.com/manual/index.html.
        * Improved sectioning printouts in the model-free dauvergne_protocol auto-analysis.
        * Significant improvements for the relax controller window.
        * All wizards and user functions in the relax GUI now have focus so that keyboard is active without requiring a mouse click.
        * The ESC key will now close the relax controller window and all user function windows.
        * The structure.load_spins user function can now load spins from multiple non-identical molecules and merge them into one molecule allowing missing atoms and differential atom numbering to be handled.
        * Improvements to the printouts for many user functions.


    Changes:
        * Updated the minfx version in the release checklist document to version 1.0.11.
        * Updated the relax version in the release checklist document to be more modern.
        * Spelling fixes for the CHANGES file.
        * Updates for the release checklist document.  This is mainly because the main release notes are now the relax wiki, for example for the current version at http://wiki.nmr-relax.com/Relax_3.3.1.
        * Spelling fixed throughout the CHANGES document.
        * Removed a few triple spaces in the CHANGES document.
        * Added periods to the end of all items in the CHANGES document.
        * Fix for an 'N/A' in the CHANGES document.
        * Converted a number of single spaces between sentences to double spaces in the CHANGES document.
        * More updates for the announcement section of the release checklist document.
        * The HTML version of the manual is now compiled with Unicode character support.  This is for the manual at http://www.nmr-relax.com/manual/index.html.  It allows Greek symbols, for example, to be represented as text rather than LaTeX generated PNG images.  This fixes titles and massively decreases the number of images required by the HTML pages.
        * Removal of many dual LaTeX and latex2html section titles in the manual.  As the HTML manual (http://www.nmr-relax.com/manual/index.html) is now compiled with Unicode support, the Greek characters in the titles are now supported.  Therefore in the model-free and the values, gradients, and Hessians chapters, the dual LaTeX and latex2html section titles could be collapsed to the standard LaTeX section title.  This will result in better formatting of the manual and its links.
        * Added instructions and a build script for creating a useful version of latex2html.  This version is essential for building the HTML version of the manual at http://www.nmr-relax.com/manual/.  The build script downloads the Debian latex2html-2008 sources as well as all Debian patches for latex2html.  It then applies a number of patches for fixing and improving the relax documentation.  The program is then compiled and can be installed as the root user into /usr/local/.
        * Extended the number of words used in the HTML webpage file names.  This is to hopefully prevent files from being overwritten by multiple files having the same name.
        * Added the write out of parameters and chi2 values, when creating a dx_map.  Task #7860 (https://gna.org/task/index.php?7860): When dx_map is issued, create a parameter file which maps parameters to chi2 value.
        * Created system test Relax_disp.test_dx_map_clustered_create_par_file, which must show that relax is not able to find the local minimum under clustered conditions.  When creating the map, the map contain chi2 values, which are lower than the clustered fitted values.  This should not be the case.  Running a larger map with larger bounds and more increments, which should show that there exist a minimum in the minimisation space with a lower chi2 value.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate() does not calculate chi2 value for clustered residues.  Task #7860 (https://gna.org/task/index.php?7860): When dx_map is issued, create a parameter file which maps parameters to chi2 value.
        * Renamed test scripts and files for producing surface chi2 plots.
        * Renamed sample scripts making surface maps.
        * Added scripts to make surface plots of spin independents parameters dw and R2a.
        * Added example surface chi2 values for plots.  Task #7826 (https://gna.org/task/index.php?7826): Write an python class for the repeated analysis of dispersion data.
        * Added example save state for more surface plotting.
        * Added boolean argument to dx.map() function, to specify the creation of a parameter and associated chi2 values file.  For very very special situations, the creation of this file is not desired.
        * Modified that structure of points in dx.map() is always a list of numpy arrays with 3 values.
        * When issuing dx.map() function with points, implemented the writing out of parameter file, with associated calculated chi2 values.
        * Improved the feedback in the User_functions.test_structure_add_atom system test.  It is now clearer what the input and output data is.
        * The devel_scripts/python_multiversion_test_suite.py script now runs relax with the --time flag.  This is for quicker identification of failure points.  It will also force the sys.stdout buffer to be flushed more often on Python 2.5 so that it does not appear as if the tests have frozen.
        * Added check to system test Relax_disp.test_cpmg_synthetic_dx_map_points() for the creation of a matplotlib surface command plot file.
        * Added the write out of a matplotlib command file, to plot surfaces of a dx map.  It uses the minimum chi2 value in the map space, to define surface definitions.  It creates a X,Y; X,Z; Y,Z map, where the values in the missing dimension has been cut at the minimum chi2 value.  For each map, it creates a projected 3d map of the parameters and the chi2 value, and a heat map for the contours.  It also scatters the minimum chi2 value, the 4 smallest chi2 values, and maps any points in the point file, to a scatter point.  Mapping the points from file to map points, is done by finding the shortest Euclidean distance in the space from the points to any map points.
        * Fix for testing the raise of expected errors in system tests.  The system test will not be tested, if Python version is under version 2.7.  Bug #22801 (https://gna.org/bugs/?22801): Failure of the relax test suite on Python 2.5.
        * Inserted a z_axis limit for the plotting of 2D surfaces in matplotlib.
        * Added better figure control of chi2 values on z-axis for surface plots.
        * Narrowed in dx_map in system test Relax_disp.test_dx_map_clustered_create_par_file().  This is to illustrate the failure of relax finding the global minimum.  It seems there is a shallow barrier, which relax failed to climb over, in order to find the minimum value.
        * Added the verbosity argument to the pipe_control.minimise.reset_min_stats() function.  All of the minimisation code which calls this now send in their verbosity arguments.  This allows the text "Resetting the minimisation statistics." to be suppressed.
        * Added the verbosity argument to the pipe_control.value.set() function.  This is passed into the pipe_control.minimise.reset_min_stats() function so its printouts can be silenced.
        * The pipe_control.opendx space mapping code now calls the value.set() function with verbosity=0.  This is to silence the very repetitive statistics resetting messages when executing the dx.map user function.
        * Added more checks to the determine_rnd() of the dauvergne_protocol model-free auto-analysis.  This is to try to catch bizarre situations such as bug #22730 (https://gna.org/bugs/?22730), model-free auto-analysis - relax stops and quits at the polate step.  The following additional fatal conditions are now checked for:  A file with the same name as the base model directory already exists;  The base model directory is not readable;  The base model directory is not writable.  The last two could be caused by file system corruptions.  In addition, the presence of the base model directory is checked for using os.path.isdir() rather than catching errors coming out of the os.listdir() function.  These changes should make the analysis more robust in the presence of 'strangeness'.
        * Added an additional check to determine_rnd() of the dauvergne_protocol model-free auto-analysis.  This is to try to catch bizarre situations such as bug #22730 (https://gna.org/bugs/?22730), model-free auto-analysis - relax stops and quits at the polate step.  The additional check is that if the base model directory is not executable, a RelaxError is raised.
        * Added printouts to the determine_rnd() function of the dauvergne_protocol model-free auto-analysis.  This is for better user feedback in the log files as to what is happening.  It may help in debugging bug #22730 (https://gna.org/bugs/?22730): Model-free auto-analysis - relax stops and quits at the polate step.
        * Alphabetical ordering of imports in the dauvergne_protocol model-free auto-analysis.
        * Changed the model-free single spin optimisation title printouts.  The specific_analyses.model_free.optimisation.spin_print() function has been deleted.  It has instead been replaced by a call to lib.text.sectioning.subtitle().  This is to match the grid search setup title printouts and to differentiate these titles from those printed out by minfx being underlined by '~' characters.
        * Added extensive sectioning printouts to the dauvergne_protocol model-free auto-analysis.  The lib.text.section functions title() and subtitle() are now used to mark out all parts of the auto-analysis.  This will allow for a much better understanding of the log files produced by this auto-analysis.
        * Complete redesign of the following of text in the relax controller window in the GUI.  The current design for some reason no longer worked very often, and there would be many situations where the scrolling to follow the text output would stop and could never be recovered.  Therefore this feature has been redesigned.  In the LogCtrl element of the relax controller, which displays the relax output messages, the at_end class boolean variable has been introduced.  It defaults to True.  The following events will turn it off:  Arrow keys, Home key, End key, Ctrl-Home key, Mouse button clicks, Mouse wheel scrolling, Window thumbtrack scrolling (the side scrollbar), finding text, the pop up menu 'Go to start', and Select all (menu or Ctrl-A).  It will only be turned on in two cases:  The pop up menu 'Go to end', and if the caret is on the final line (caused by Ctrl-End, Mouse wheel scrolling, Page Down, Down arrow, Window thumbtrack scrolling, etc.).  Three new methods have been introduced to handle certain events:  capture_mouse() for mouse button clicks, capture_mouse_wheel() for mouse wheel scrolling, and capture_scroll for window thumbtrack scrolling.
        * Improvements for selecting all text in the relax controller window.  Selecting text using the pop up menu or [Ctrl-A] now shifted the caret to line 1 before selecting all text.  This deactivates the following of the end of text, if active, as the text following feature causes the text selection to be lost.
        * Modified the behaviour of the relax controller window so that pressing escape closes the window.  This involves setting the initial focus on the LogCtrl, and catching the ESC key press in the LogCtrl as well as all relax controller read only wx.Field elements and calling the parent controller handle_close() method.
        * Replaced the hardcoded integer keycodes in the relax controller with the wx variables.  This is for the LogCtrl.capture_keys() handler method for dealing with key presses.
        * Improvement for all wizards and user functions in the relax GUI.  The focus is now set on the currently displayed page of the wizard.  This allows the keyboard to be active without requiring a mouse click.  Now text can be instantly input into the first text control and the tab key can jump between elements.  As the GUI user functions are wizards with a single page, this is a significant usability improvement for the GUI.
        * The ESC character now closes all wizards and user functions in the relax GUI.  By using an accelerator table set to the entire wizard window to catch the ESC keyboard event, the ESC key will cause the _handler_escape() method to be called which then calls the windows Close() method to close the window.
        * Changed the logic for how the new analysis wizard in the GUI is destroyed.  This relates to bug #22818 (https://gna.org/bugs/?22818), the GUI test suite failures in MS Windows - PyAssertionError: C++ assertion "Assert failure".  The Destroy() method has been added to the Analysis_wizard class to properly close all elements of the wizard.  This is now called from the menu_new() method of the Analysis_controller class, which is the target of the menu item and toolbar button.  To allow the test suite to use this, the menu_new() method now accepts the destroy boolean argument.  The test suite can set this to False and then access the GUI elements after calling the method (however the Destroy() method must be called by the test suite).
        * Resign of how the new analysis wizard is handled in the GUI tests.  This relates to bug #22818 (https://gna.org/bugs/?22818), the GUI test suite failures in MS Windows - PyAssertionError: C++ assertion "Assert failure".  The GUI test base class method new_analysis_wizard() has been created to simplify the process.  When a new analysis is desired, this method should be called.  It will return the analysis page GUI element for use in the test.  The method standardises the execution of the new analysis wizard and sets up the analysis in the GUI.  It also properly destroys the wizard to avoid the memory leaking issues such as bug #22818.  All GUI tests have been converted to use new_analysis_wizard().  This allows the GUI tests to pass on MS Windows.  However there are still significant sources of memory leaks (the USER Objects count) visible in the Windows Task Manager.
        * Fix for the gui.fonts module to allow it to be used outside of the GUI.
        * Updated all of the scripts in devel_scripts/gui/.  These have been non-functional since the merger of the relax bieri_gui branch back in January 2011.
        * The gui.misc.bitmap_setup() function can now be used outside of the GUI.
        * Fix for the GUI test base class new_analysis_wizard() method for relaxation dispersion analyses.
        * Modified the pipe_control.pipes.get_bundle() function to operate when no pipe is supplied.  In this case, the pipe bundle that the current data pipe belongs to will be returned.
        * Created the Periodic_table.has_element() method for the lib.periodic_table module.  This is used to simply check if a given symbol exists as an atom in the periodic table.
        * Added 4 unit tests to the _lib.test_periodic_table module for the Periodic_table.has_element() method.
        * Modified the internal structural object backend for the structure.read_pdb user function.  The MolContainer._det_pdb_element() method for handling PDB files with missing element information has been updated to use the Periodic_table.has_element() method to check if the PDB atom name corresponds to any atoms in the periodic table.  This allows for far greater support for HETATOMS and all of the metals.
        * Created the Structure.test_load_spins_multi_mol system test.  This is to test yet to be implemented functionality of the structure.load_spins user function.  This is the loading of spin information similar, but not necessarily identical molecules all loaded into the same structural model.  For this, the from_mols argument will be added.
        * Fixes for the Structure.test_load_spins_multi_mol system test.  The call to the structure.load_spins user function has also been modified so that all 3 spins are loaded at the same time.
        * Implemented the multiple molecule merging functionality of the structure.load_spins user function.  The argument has been added to the user function frontend and a description added for this new functionality.  In the backend, the pipe_control.structure.main.load_spins() function will now call the load_spins_multi_mol() function if from_mols is supplied.  This alternative function is required to handle missing atoms and differential atom numbering.
        * Modified the N_state_model.test_populations system test to test the grid search code paths.  This performs a grid search of one increment after minimisation, then switches to the 'fixed' N-state model and performs a second grid search of one increment.  This now tests currently untested code paths in the grid_search() API method behind the minimise.grid_search user function.  The test demonstrates a bug in the N-state model which was not uncovered in the test suite.
        * Created the N_state_model.test_CaM_IQ_tensor_fit system test.  This is for catching bug #22849 (https://gna.org/bugs/?22849), the failure of the N-state model analysis when optimising only alignment tensors using RDCs and/or PCSs.  This new test checks code paths unchecked in the rest of the test suite, and is therefore of high value.
        * Modified the atomic position handling in pipe_control.structure.main.load_spins_multi_mol().  The multiple molecule merging functionality of the structure.load_spins user function now handles missing atomic positions differently.  The aim is that the length of the spin container position variable is fixed for all spins to the number of structures, as the N-state model analysis assumes this equal length for all spins.  When data is missing, the atomic position for that structure is now set to None.  This will require other modifications in relax to support this new design.
        * Modified the interatom.unit_vectors user function backend to handle missing atomic positions.  This is to match the structure.load_spins user function change whereby missing atomic positions are now set to the value of None.
        * Fix for the atomic position handling in pipe_control.structure.main.load_spins_multi_mol().  The dimensionality of the position structure returned by the structural object atom_loop() method needed to be reduced.
        * The structure.load_spins user function now stores the number of states in cdp.N.  This is to help the specific analyses which handle ensembles of structures.  With the introduction of the from_mols argument to the structure.load_spins user function, the number of states is now not equal to the number of structural models, as the states can now come from different structures of the same model.  Therefore the user function will now explicitly set cdp.N to the number of states depending on how the spins were loaded.
        * Clean up and speed up of the N_state_model.test_CaM_IQ_tensor_fit system test.  All output files are now set to 'devnull' so that the system test no longer creates any files within the relax source directories.  And the optimisation settings have been decreased to hugely speed up the system test.
        * Expanded the lib.arg_check.is_float_matrix() function by adding the none_elements argument.  This matches a number of the other module functions, and allows for entire rows of the matrix to be None.
        * Lists of lists containing rows of None are now better supported by the lib.xml functions.  The object_to_xml() function will now convert the float parts to IEEE-754 byte arrays, and the None parts will be stored as None in the <ieee_754_byte_array> list node.  The matching xml_to_object() method has also been modified to read in this new node format.  This affects the results.write and state.save user functions (as well as the results.read and state.load user functions).
        * Added spacing after the minimise.grid_search user function setup printouts.  This is for better spacing for the next messages from the specific analysis.
        * Speed up of the N_state_model.test_CaM_IQ_tensor_fit system test.  This test is however still far too slow.
        * Added printouts to pipe_control.pcs.return_pcs_data() and pipe_control.rdc.return_rdc_data().  These functions now accept the verbosity argument which if greater than 0 will activate printouts of how many RDCs or PCSs have been assembled for each alignment.  This will be useful for user feedback as the spin verses interatomic data container selections can be difficult to understand.
        * The verbosity argument for the N-state model optimisation is now propagated for more printouts.  The argument for the calculate() and minimise() API methods is now sent into specific_analyses.n_state_model.optimisation.target_fn_setup(), and from there into the pipe_control.pcs.return_pcs_data() and pipe_control.rdc.return_rdc_data() functions.  That way the number of RDCs and PCSs used in the N-state model is reported back to the user for better feedback.
        * Updated the N_state_model.test_CaM_IQ_tensor_fit system test so it operates correctly as a GUI test.  All user functions are now executed through the special self._execute_uf() method to allow either the prompt interpreter or the GUI to execute the user function.
        * Modified the N_state_model.test_CaM_IQ_tensor_fit system/GUI test for implementing a new feature.  The 'spin_selection' argument has been added to the interatom.define user function.  This will be used to carry the spin selections over into the interatomic data containers.
        * Implemented the spin_selection Boolean argument for the interatom.define user function.  This has been added to the frontend with a description, and to the backend.  When set, it allows the spin selections to define the interatomic data container selection.
        * Changed the spin_selection argument default in the interatom.define user function backend.  This now defaults to False to allow other parts of relax which call this function to operate as previously.  The default for the interatom.define user function is however still True.
        * Modified the Structure.test_load_spins_multi_mol system test for the spin.pos variable changes.  The atomic position for an ensemble of structures is now set to None rather than being missing, so the system test has been updated to check for this.
        * The align_tensor.display user function now has more consistent section formatting.  The section() and subsection() functions of the lib.text.sectioning module are now being used to standardise these custom printouts with the rest of relax.
        * Modifications to the new N_state_model.test_CaM_IQ_tensor_fit system test.  The system test now checks all of the optimised values to make sure the correct values have been found.  That will block any future regressions in this N-state model code path.  The system test is now also faster.  And the pcs.structural_noise user function RMSD value has been set to 0.0 so that the test no longer has a random component affecting the final optimised values.
        * Added printouts for the rdc.calc_q_factors and pcs_calc_q_factors user functions.  These are activated by the new verbosity user function argument which defaults to 1.  If the value is greater than 0, then the backend will print out all the calculated Q factors.
        * The verbosity argument of the RDC and PCS q_factors() functions now defaults to 1.  This causes the Q factors to be printed out at the end of all N-state model optimisations.
        * Created the Structure.test_bug_22860_CoM_after_deletion system test.  This is to catch bug #22860 (https://gna.org/bugs/?22860), the failure of the structure.com user function after calling structure.delete.
        * Fix for the checks in the new Structure.test_load_spins_multi_mol system test.  A spin index was incorrect.
        * Fix for the structure.load_spins user function when the from_mols argument is used.  The load_spins_multi_mol() function of the pipe_control.structure.main module was incorrectly handling the atomic position returned by the internal structural object atom_loop() method.  This position is a list of lists when multiple models are present.  But when only a single model is present, it returns a simple list.
        * Modified the Structure.test_bug_22860_CoM_after_deletion system test to expect a RelaxNoPdbError.  This tests that the structure.com user function raises RelaxNoPdbError after deleting all of the structural information from the current data pipe.
        * The mol_name argument is now exposed in the structure.add_atom user function.  This has been added as the first argument of the user function to allow new molecules to be created or to allow the atom to be placed into a specific molecule container.  The functionality was already implemented in the backend, so it has been exposed by simply adding a new argument definition to the user function.
        * Created the Structure.test_bug_22861_PDB_writing_chainID_fail system test.  This is to catch bug #22861 (https://gna.org/bugs/?22861), the chain IDs in the structure.write_pdb user function PDB files are incorrect after calling structure.delete.
        * Small modification of the Structure.test_bug_22861_PDB_writing_chainID_fail system test.  File metadata is now being set to demonstrate that the structure.delete user function does not remove this once there is no more data left for the molecule.
        * Small indexing fixes for the dispersion chapter of the relax manual.
        * Fix for system test Relax_disp.test_cpmg_synthetic_dx_map_points.  Another import line was written to the matplotlib script.
        * Speedup and fix for system test Relax_disp.test_dx_map_clustered_create_par_file.  The following test was taken out, since this a particular interesting case.  There exist a double minimum, where relax has not found the global minimum.  This is due to not grid searching for R2a, but using the minimum value.
        * Removed debugging code from the N_state_model.test_CaM_IQ_tensor_fit system test.  This was an accidentally introduced state.save user function used to catch the system test state.  It would results in the 'x.bz2' file being dumped in the current directory.
        * Loosened the checks in the Relax_disp.test_baldwin_synthetic_full system test.  This is to allow the test to pass on Python 2.5 and 3.1 on a 32-bit GNU/Linux system.
        * Fix for the Relax_disp.test_cpmg_synthetic_dx_map_points system test for certain systems.  This change is to allow the test to pass on Python 2.5 and 3.1 on a 32-bit GNU/Linux system.  This may be related to 32-bit numpy 1.6.2 verses later numpy versions causing precision differences.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test for certain systems.  The optimisation precision has been increased, and the value checking precision has been decreased.  This change is to allow the test to pass on Python 2.5 and 3.1 on a 32-bit GNU/Linux system.  This may be related to 32-bit numpy 1.6.2 verses later numpy versions causing precision differences.
        * Converted all the extern.numdifftools modules using the dos2unix program.
        * Updated the Python 2 to Python 3 migration document to be more current.
        * Small edit of the docs/devel/2to3_checklist document.
        * Expanded the Python 2 to 3 conversion document to list the 2to3 command individually.
        * The ImportErrors in unit tests are now correctly handled by the relax test suite.  If an ImportError occurred, this was previously killing the entire test suite.
        * The target_function.relax_fit module unit tests are now skipped if the C module is not compiled.
        * Expanded the Python 2 to 3 conversion document.
        * Small update to the 2to3_checklist document - the print statement conversion has been added.
        * The lib.errors module is now importing lib.compat.pickle for better Python 2 and 3 support.  This shifts the compatibility code from lib.errors into lib.compat so that the 2to3 program will not touch the lib.errors module.
        * Better Python 3 compatibility in some test suite shared data profiling scripts.  These changes invert the logic, importing the Python 3 builtins module and aliasing xrange() to range(), and passing if an ImporError occurs.  The code will now no longer be modified by the 2to3 program.
        * Unicode fixes for the "\u" string in "\usepackage" in the module docstring.  This requires escaping as "\\usepackage" to avoid the unicode character '\u'.
        * The lib.check_types now imports io.IOBase from the lib.compat module.  This is to shift more Python 2 vs. 3 compatibility into lib.compat and out of all other modules.
        * Python 3 improvements - changed how the Python 3 absent builtins.unicode() function is handled.  The aliased builtins.str() function is now referenced as lib.compat.unicode().  The Python 2 __builtin__.unicode() function is also aliased to lib.compat.unicode().  The GUI using this function now import it from lib.compat.
        * Removed the writable base directory check in the dauvergne_protocol auto-analysis.  This check was causing the system test to fail if the user does not have write access to the installed relax directory.
        * Expanded the Mac_framework_build_3way document to include matplotlib.
        * Important bug fix for racing causing the GUI to freeze.  This is really only seen in the GUI tests on MS Windows systems, as a user could never be fast enough with the mouse.  The GUI interpreter flush() method for ensuring that all user functions in the queue have been cleared now calls wx.Yield() to force all wxPython events to also be flushed.  This change will avoid random freezing of the relax test suite.
        * Bug fix for the Mf.test_bug_21615_incomplete_setup_failure GUI test on MS Windows systems.  The GUI interpreter flush() method needs to be called between the two structure.load_spins user function calls.  Without this, the test will freeze on MS Windows.  The freezing behaviour is however not 100% reproducible and is dependent on the Windows version and wxPython version.
        * Shifted a number of wx.NewId() calls to the module namespace to conserve IDs.  These are for the menus in the main window and in the spin view window.
        * Shifted the wx.NewId() calls for the spectrum list GUI element to the module namespace.  These IDs are used for the pop up menus.  The change avoids repetitive calls to wx.NewId() every time a right click occurs, conserving wx IDs so that they are not exhausted when running the test suite or running the GUI for a long time.
        * More shifting of wx.NewId() calls for popup menus to module namespaces to conserve IDs.
        * Converted all of the GUI wizard button IDs to -1, as they are currently unused.  This should conserve wx IDs, especially in the test suite.
        * Shifted the main GUI window toolbar button wx IDs to the module namespace.  This has no effect apart from better organising the code.
        * Shifted the relax controller window popup menu wx IDs to the module namespace.  This is simply to better organise the code to match the other GUI module changes.
        * Menus created by the gui.components.menu.build_menu_item() now default to the wx ID of -1.  This is to conserve wx IDs.  If the calling code does not provide the ID, there is no need to grab one from the small pool of IDs.
        * Shifted the spin viewer GUI window toolbar button wx IDs to the module namespace.  This should conserve wx IDs as the window is created and destroyed, as only 2 IDs will be taken from the small pool for the entire lifetime of the program.
        * Shifted all of the wx.NewId() calls for the new analysis wizard into the module namespace.  This will hugely save the number of wx IDs used by the GUI, especially in the test suite.  Instead of grabbing 8 IDs from the small pool every time the new analysis wizard is created, only 8 IDs for the lifetime of the program will be used.
        * Another large wx ID saving change.  The ID associated with the special accelerator table that allows the ESC button to close relax wizards is now initialised once in the module namespace, and not each time a wizard is created.
        * A small wx ID conserving change - the 'Execute' button in the analysis tabs now uses the ID of -1.  A unique ID is not necessary and is unused.
        * The user function class menus no longer have unique wx IDs, as these are unnecessary.  This conserves the small pool of unique wx IDs, as the spin viewer window is created and destroyed.
        * Bug fix for the structure.load_spins user function new from_mols argument.  This was incorrectly using the pipe_control.pipes.pipe_names() function to obtain its default values in the GUI (although this is not currently uesd).  The result was a non-fatal error message on Mac OS X systems of "Python[1065:1d03] *** __NSAutoreleaseNoPool(): Object 0x3a3944c of class NSCFString autoreleased with no pool in place - just leaking".
        * Added a debugging Python version check to the devel_scripts/memory_leak_test_relax_fit.py script.  This prevents the script from being executed with a normal Python binary.
        * Created the blacklisted Noe.test_noe_analysis_memory_leaks GUI test.  This long test can be manually run to help chase down memory leaks.  This can be monitored using the MS Windows task manager, once the 'USER Objects' column is shown.  If the USER Objects count reaches 10,000 in Windows, then no more GUI elements can be created and the user will see errors.
        * Added a printout to the Noe.test_noe_analysis_memory_leaks GUI test to help with debugging.
        * Improved debugging printouts for the Noe.test_noe_analysis_memory_leaks GUI test.
        * Small fix for the GUI analysis deletion method to prevent racing in the GUI tests.
        * Redesigned how wizards are destroyed in the GUI.  The relax wizard Destroy() method is now overridden.  This allows the buttons in the wizard to be properly destroyed, as well as all wizard pages.  This should remove a lot of GUI memory leaks.
        * Created the General.test_new_analysis_wizard_memory_leak blacklisted GUI test.  This will be used to check for memory leaks in the new analysis wizard.
        * Removed an unused dictionary from the GUI wizard object.
        * Added a wx.Yield() before destroying the new analysis wizard via menu_new().  This is to avoid racing which can be triggered in the test suite.


    Bugfixes:
        * Fix for the latex2html tags in the model-free chapter of the relax manual.  This bug may affect the compilation of both the PDF and HTML version (http://www.nmr-relax.com/manual/) of the manual.
        * Formatting improvements for the user function chapter of the HTML manual.  This is for http://www.nmr-relax.com/manual/Alphabetical_listing_user_functions.html.  This will hopefully fix the horrible formatting whereby all text is wrapped in the HTML tags <SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="FOOTNOTESIZE"><SMALL CLASS="SCRIPTSIZE">text</SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL></SMALL>.
        * Big bug fix for the text size formatting of the HTML manual.  The previous fix for the user function chapter of the HTML manual (http://www.nmr-relax.com/manual/Alphabetical_listing_user_functions.html) did not fix the problem.  The issue was with the {exampleenv} defined using a \newenvironment command in the preamble.  The command \footnotesize was bing used in the start, but nothing was changing the font size at the end.  In LaTeX, the ending of the environment appears to reset the font size, whereas in latex2html it does not.  Therefore all text after this environment is prepended by <SMALL CLASS="FOOTNOTESIZE"> in the HTML manual and this keeps adding to the text after each new exampleenv environment.
        * Fix for the poorly written User_functions.test_structure_add_atom GUI test.  This fixes one part of 2 of the bug #22772 (https://gna.org/bugs/?22772), the modelfree4 binary issue and the User_functions GUI tests with wxPython 2.9 failures of the test suite.  The problem was that a list element was being set in the GUI test, but that element did not exist yet.  Somehow this worked in wxPython 2.8.  But the bad code failed on wxPython 2.9.
        * Updated the Palmer.test_palmer_omp system test for the 64-bit Linux Modelfree 4.20 GCC binary file.  This fixes the second part and last part of the bug #22772 (https://gna.org/bugs/?22772), the modelfree4 binary issue and the User_functions GUI tests with wxPython 2.9 failures of the test suite.  The problem is that the 64-bit GNU/Linux GCC compiled binary of Modelfree 4.20 produces different results as previous versions.  These are now caught by the system test and correctly checked.
        * Removal the use of OrderedDict().  OrderedDict is first available in python 2.7, and is not essential functionality.  The functionality is replaced with looping over a list of dictionary keys instead, which is picked up under analysis.  Bug #22798 (https://gna.org/bugs/?22798): Failure of relax to start due to an OrderedDict ImportError on Python 2.6 and earlier.
        * Fix for the find next bug in the relax controller window.  This is bug #22815 (https://gna.org/bugs/?22815), the failure of find next using F3 (or Ctrl-G on Mac OS X) in the relax controller window if search text has already been set.  The fix was simple, as the required flags are in the self.find_data class object (an instance of wx.FindReplaceData).
        * Fix for find dialog in the relax controller window.  This is for bug #22816 (https://gna.org/bugs/?22816), the find functionality of the relax controller window does not find text when using wxPython >= 2.9.  The find wxPython events are now bound to the find dialog rather than the relax controller window LogCtrl element for displaying the relax messages.  This works on all wxPython versions.
        * Bug fix for the structure.align user function for when no data pipes are supplied.
        * Bug fix for the N-state model grid search when only alignment tensor parameters are optimised.  The algorithm for splitting up the grid search to optimise each tensor separately, hence massively collapsing the dimensionality of the problem, was being performed incorrectly.  The grid_search() API method inc, lower, and upper arguments are lists of lists, but were only being treated as lists.
        * Final fix for bug #22849 (https://gna.org/bugs/?22849).  This is the failure of the N-state model analysis when optimising only alignment tensors using RDCs and/or PCSs.  The alignment tensor is no longer initialised to zero values.  This is to allow the skip_preset argument for the minimise.grid_search user function to be operational for the N-state model, a feature introduced with the zooming grid search.  The solution was to check for the uninitialised tensor in the minimise_setup_fixed_tensors() method of the specific_analyses.n_state_model.optimisation module.
        * Bug fix for the lib.arg_check.is_float_matrix() function.  The check for a numpy.ndarray data structure type was incorrect so that lists of numpy arrays were failing in this function.  Rank-2 arrays were not affected.
        * Fix for the structure.com user function.  This fixes bug #22860 (https://gna.org/bugs/?22860), the failure of the structure.com user function after calling structure.delete.  The number of models in cdp.structure is now counted and if set to zero, RelaxNoPdbError will be raised.
        * The structure.write_pdb user function can now handle empty molecules.  This fixes bug #22861 (https://gna.org/bugs/?22861), the chain IDs in the structure.write_pdb user function PDB files are incorrect after calling structure.delete.  To handle this consistently, the internal structural object ModelContainer.mol_loop() generator method has been created.  This loops over the molecules, yielding those that are not empty.  The MolContainer.is_empty() method has been fixed by not checking for the molecule name, as that remains after the structure.delete user function call while all other information has been removed.  And finally the write_pdb() structural object method has been modified to use the mol_loop() method rather than performing the loop itself.
        * Fix for the structure.delete user function for molecule metadata once no more data exists.  This relates to bug #22861 (https://gna.org/bugs/?22861), the chain IDs in the structure.write_pdb user function PDB files are incorrect after calling structure.delete.  The metadata, when it exists, is now deleted for the molecule once no more data is present.
        * Fix for system test Relax_disp.test_bug_atul_srivastava.  The call to the expected RelaxError needed to be performed differently for erlier python versions that 2.7.
        * Fix for bug #22937 (https://gna.org/bugs/?22937).  This is the failure of the Relax_disp.test_estimate_r2eff_err_auto system test on Python 2.5.  The test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/1_setup_r1rho_GUI.py simply required a newline character at the end of the file so that it can be executed in Python 2.5.
        * Fix for bug #22938 (https://gna.org/bugs/?22938).  This is the failure of the test suite in the relax GUI.  The problem was that the status.skip_blacklisted_tests variable did not exist - it was only initialised if relax is started in test suite mode.  Now the value is always set from within the status module and defaults to True.
        * Python 3 fixes for the relax codebase.  These changes were made using the command: 2to3 -j 4 -w -f buffer -f idioms -f set_literal -f ws_comma -x except -x import -x imports -x long -x numliterals -x xrange .
        * Python 3 fixes throughout relax, as identified by the 2to3 script.  The command used was: 2to3 -j 4 -w -f except -f import -f imports -f long -f numliterals -f xrange .
        * Python 3 fixes - eliminated all usage of the dictionary iteritems() calls as this no longer exists.
        * Python 3 fixes using 2to3 for the extern.numdifftools package (mainly spacing fixes).  The command used was: 2to3 -j 4 -w -f buffer -f idioms -f set_literal -f ws_comma -x except -x import -x imports -x long -x numliterals -x xrange .
        * Python 3 fixes using 2to3 for the extern.numdifftools package.  The command used was: 2to3 -j 4 -w -f except -f import -f imports -f long -f numliterals -f xrange .
        * Python 3 fixes for all print statements in the extern.numdifftools package.  The print statements have been manually converted into print() functions.
        * Python 3 fixes via 2to3 - elimination of all map and lambda usage in relax.  The command used was: 2to3 -j 4 -w -f map .
        * Python 3 fixes via 2to3 - replacement of all `x` with repr(x).  The command used was: 2to3 -j 4 -w -f repr .
        * Manual Python 3 fixes for the dict.key() function which returns a list or iterator in Python 2 or 3.  This involves a number of changes.  The biggest is the conversion of the "x in y.keys()" statements to "x in y".  For code which requires a list of keys, the function calls "list(y.keys())" or preferably "sorted(y.keys())" are used throughout (sorted() ensures that the list will be of the same order on all operating systems and Python implementations).  A number of "x in list(y.keys())" statements were simplified to "x in y", some list() calls changed to sorted(), and some unnecessary list() calls were removed.
        * Python 3 fixes via 2to3 - elimination of all apply() calls.  This only affects the GUI which cannot run in Python 3 yet as wxPython is not Python 3 compatible yet.  The command used was: 2to3 -j 4 -w -f apply .
        * Python 3 fixes via 2to3 - proper handling of the dict.items() and dict.values() functions.  These are now all wrapped in list() function calls to ensure that the Python 3 iterators are converted to list objects before they are accessed.  The command used was: 2to3 -j 4 -w -f dict .
        * Python 3 fixes via 2to3 - the execfile() function does not exist in Python 3.  The command used was: 2to3 -j 4 -w -f execfile .
        * Python 3 fixes via 2to3 - the filter() function in Python 3 now returns an iterator.  The command used was: 2to3 -j 4 -w -f filter .



Version 3.3.1
(9 October 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.1

    Features:
        * Initial auto-analysis support for a highly repetitive protocol for analysing relaxation dispersion data.
        * Addition of the docs/user_function_changes.txt file which documents all user function changes from relax 1.0.1 to 3.3.1 to help with upgrading scripts to newer relax versions.
        * Updated the translation table used to identify no longer existing user functions and explain what the new user function is called for all relax versions from 1.3.1 to 3.3.1.
        * The structure.delete user function can now delete individual models as well as select atoms in individual models.
        * Addition of the error_analysis.covariance_matrix user function for determining parameter errors via the covariance matrix.  This is currently only implemented for the relaxation curve-fitting analysis.
        * Bundling of the Numdifftools 0.6.0 package with relax (https://code.google.com/p/numdifftools/) for numerically testing implementations of gradients, Hessians, and Jacobians.
        * Implementation of the internal structural object collapse_ensemble() method to allow for all but one model to be deleted.
        * Massive speed up of the internal structural object by pre-processing the atom ID string into a special atom selection object.  This speeds up the interatom.define, structure.delete, structure.rotate, structure.translate and many other user functions which loop over structural data.
        * Many orders of magnitude speed up of the structure.add_model user function.
        * Implementation of the structure.mean user function to calculate the mean structure from the atomic coordinates of all loaded models.
        * Implementation of the structure.align user function for aligning and superimposing different but related structures.  This is similar to the structure.superimpose user function but allows for missing atomic information or small sequence changes.  Only atoms with the same residue name and number and atom name are used in the superimposition.
        * Expanded the structure.com user function to accept the atom_id argument to allow the centre of mass of a subset of atoms to be determined.
        * Improvements for the running of the relax test suite.


    Changes:
        * Epydoc docstring fix for the dep_check.version_comparison() function.
        * Removed ZZ and HD exchange from the dispersion chapter of the relax manual.  These would probably require completely new analysis types added to relax to analyse such data.
        * Updated the 'Announcement' section of the release checklist document.  This now includes details about initially composing the message using the relax wiki (http://wiki.nmr-relax.com), and then how that text and the CHANGES file are used for the email announcement (http://news.gmane.org/gmane.science.nmr.relax.announce) and the Gna! news item (https://gna.org/news/?group=relax).
        * Small changes for the Gna! news item in the release checklist document.
        * Modified the announcement section of the release checklist document.  Text about removing wiki markup has been added.
        * More expansion of the release checklist document.  Added text about creating internal and external links for the wiki release notes.
        * Modified systemtest Relax_disp.test_show_apod_extract that test output from showApod.  The output can be different according to NMRPipe version.  The 'Noise Std Dev' is though the same.
        * Fix for comments to dependency check of showApod.
        * Fix for raising error when calling showApod, and subprocess module not available.
        * Fix for the dependency check for showApod in systemtests.
        * Further extended the protocol for repeated dispersion analysis.  Task #7826 (https://gna.org/task/index.php?7826): Write an python class for the repeated analysis of dispersion data.
        * Extended the system test for the protocol for repeated dispersion analysis.  Task #7826 (https://gna.org/task/index.php?7826): Write an python class for the repeated analysis of dispersion data.
        * Added a relaxation dispersion model profiling log file for relax version 3.3.0 vs. 3.2.3.  This is the output from the dispersion model profiling master script.  These numbers will be used for the relax 3.3.0 release notes (http://wiki.nmr-relax.com/Relax_3.3.0).
        * Fixes for the relax 3.3.0 vs. 3.2.3 dispersion model profiling log file.  The numeric model numbers were incorrectly scaled and a factor of 10 too high.
        * Fixes for the scaling factors in the dispersion model super profiling script.
        * Editing of the relax 3.3.0 features section of the CHANGES file.  This will be used for the release notes.
        * Added more test data for the repeated analysis.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Updated the Baldwin 2014 reference in the relax manual.  The pybliographic software was used to format this BibTeX entry (http://pybliographer.org/).  This was updated as volume and page number information is now available.
        * Updated the Morin et al, 2014 paper (the relax relaxation dispersion paper) reference in the manual.  The paper now has volume and page information.
        * Added some more user function ranamings to the translation table.  These were identified while preparing the release notes on the wiki (http://wiki.nmr-relax.com/Category:Release_Notes, http://wiki.nmr-relax.com/Release_notes).
        * Stored a frequency dependent dictionary with spectrum IDs and repeated PMG frequencies in setup pipe.  This information will progress out through children pipes.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Further extended methods in the class for repeated analysis of dispersion data.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Updated the release checklist document, including adding a section about cross-linking.  The cross-linking is important for search engine indexing.
        * Created a simple script for printing out the names of all user functions.
        * Added listings of all user functions from relax version 2.0.0 all the way to relax 3.3.0.  This will be used to look at how the user function names have changed with time.
        * Added a script and log file for comparing relax user function differences between versions.
        * Created a document for relax users which follows the changes to the user function names.
        * For the spin.display user function, added the print out of spin ID and status for selection.  This is to help with showing the spin ID string for selection, and the current status of selection.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * To the back-end of display pipes, added functionality to sort the pipe names before printing.  Also added the return of the list of pipes, with its associated information about pipe type, and pipe_bundle.  This is to help with getting a better overview for multiple pipes in data store.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Parsed the force flag from front end of value.set to back end.  Bug #22598 (https://gna.org/bugs/index.php?22598).  Back end of value.set does not respect force=False flag.
        * Broke optimisation function into smaller functions.  This is to help selecting spins, do particular grid search and minimise.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Modified system test to follow the new functions in the auto analysis.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Shifted the user function listing script into the test suite directory where the results are.
        * Created a script for printing out relax 1.3 user functions.
        * Stripped out all of the relax intro and script printouts from the user function listing files.  This allows the diff.py script to be simplified.
        * Updated the relax 1.3 user function printout script and added many printouts.  The printouts are for relax versions 1.3.5 to 1.3.16.  The earlier relax versions used the relax 1.2 user function setup.
        * Created a script for printing out all user functions for relax 1.2 versions.  This also includes the relax 1.3.0 to 1.3.4 versions.
        * Added the relax 1.3.0 to 1.3.4 user function printouts.
        * Changed the behaviour of the script for showing user function difference between relax versions.  The relax versions are now reversed so the oldest version is at the bottom of the difference printout.
        * Added the relax 1.0.1 to 1.2.15 user function printouts.  The diff.log file has also been updated with all of these versions.
        * Updated the user_function_changes.txt document.  This now lists all changes in the user function naming from relax version 1.0.1 all the way to relax 3.3.0.
        * Added all remaining user function ranamings since relax 2.0.0 to the translation table.  These were taken directly from the docs/user_function_changes.txt document.
        * Added all user function ranamings since relax 1.3.1 to the translation table.  These were taken directly from the docs/user_function_changes.txt document.  Earlier relax versions are far too different, so this will be the earliest relax version for this translation table.  The relax 1.2 and earlier (and 1.3.0) versions used the run argument throughout and the scripting was so different, that telling the user how to upgrade to new user functions is pointless.  And the release date of relax 1.2.15, the last of these old designs was in November 2008.
        * Changed the order of the two relax versions being compared for user function changes.  This is in the diff.py script and log file and the user_function_changes.txt document.
        * Changed the organisation of the files in the docs/ directory.  A new docs/devel directory has been created and the 2to3_checklist, Mac_framework_build_3way, package_layout, and prompt_screenshot.txt documents shifted into it.  This is to hide or abstract away the development documents so that relax users do not see them when looking into docs/.  This should make the directory less intimidating.
        * Shifted the Release_Checklist document into docs/devel/ to hide it from users.
        * Correction for the noe.read to spectrum.read_intensities user function change.  This is for the translation table used to catch old user function calls.
        * Initial try to implement plotting in the repeated auto analysis protocol.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Small improvement of the matplotlib plotting of data in the repeated analysis protocol.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Fix for calling correct folder with test intensities.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * For the class of repeated analysis, implemented method to collect peak intensity, and function to plot the correlation.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Added system test Relax_disp.test_repeat_cpmg to be skipped, if no matplotlib module exists.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Added the Gimp XCF file for the logo of the relax wiki (http://wiki.nmr-relax.com).
        * Added system test Relax_fit.test_curve_fitting_height_estimate_error() for the manual and automated analysis of exponential fit.  This is to prepare for new methods in the auto analysis protocol.
        * In the auto analysis of exponential fitting, changed the minimisation method from simplex to Newton, to speed-up the fitting.  This is for master Monte Carlo simulations.
        * In the system test Relax_fit.test_curve_fitting_height_estimate_error(), moved the auto-detection of replicated spectra into the manual method.  This is to prepare for auto-mated detection of replicates.
        * Implemented a method to automatically find duplicates of spectrum in exponential fit.  This is to ease the user intervention for error analysis, if this has been forgotten.
        * Implemented the writing out of a "grace2images.py" script file, when performing auto analysis of exponential fits.
        * Created the Structure.test_delete_model system test.  This is in preparation for extending the structure.delete user function to be able to delete individual structural models.  The test will only pass once this functionality is in place.
        * Expanded the wiki instructions in the release checklist document.  This includes a number of steps for significantly improving the release notes:  External links to the Gna! trackers with full descriptions, external links to the HTML user manual for all user functions, internal links to release notes of other relax versions, internal links to wiki pages for all models from all theories, and HTML formatting of all symbols/parameters/etc.
        * Introduction of the model argument to the structure.delete user function.  This argument is passed all the way into the internal structural object, but is not used yet.
        * The model argument in the structure.delete user function is now operational.  In the internal object, it has two functions.  When the atom_id argument is none, then new ModelList.delete_model() function is being called to remove the entire model from the list of structural models.  When the atom_id argument is supplied, then only the corresponding atoms in the given model will be deleted.
        * Expanded the checking in the Structure.test_delete_model system test.  Now a number of structural model loading and deletion scenarios are tested.
        * Implemented back-end function to estimate Rx and I0 errors from Jacobian matrix.  This is to prepare for user function in relax_fit, to estimate errors.
        * Implemented user function relax_fit.rx_err_estimate in relax_fit to estimate Rx and I0 errors from the Jacobian Co-variance matrix.
        * Extended system test Relax_fit.test_curve_fitting_height_estimate_error() to test the error estimation method from the Co-variance matrix.  The results seems very similar, if increasing to 2000 Monte Carlo simulations.
        * Renamed the pipe_control.monte_carlo module to pipe_control.error_analysis.  This is in preparation for the module to handle all error analysis techniques:  Monte Carlo simulations, covariance matrix, Jackknife simulations, Bootstrapping (which is currently via the Monte Carlo functions), etc.  All current functions are now prepended with 'monte_carlo_*()'.
        * Fix for the old relax 1.2 model-free results file reading.  This is due to the pipe_control.monte_carlo to pipe_control.error_analysis module renaming.
        * Implemented the pipe_control.error_analysis.covariance_matrix() function.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.scm/23526/focus=7096.  It will be used by a new error_analysis.covariance_matrix user function.  And it calls the specific API methods model_loop(), covariance_matrix(), and set_error() and the relax library lib.statistics.multifit_covar() function do to most of the work.
        * Modified the Relax_fit.test_curve_fitting_height_estimate_error system test.  The call to relax_fit.rx_err_estimate has been replaced by the yet-to-be implemented error_analysis.covariance_matrix user function.
        * Creation of the error_analysis.covariance_matrix user function.  This is simply a code rearrangement.  The relax_fit user function module was duplicated and relax_fit.rx_err_estimate renamed to error_analysis.covariance_matrix.  References to the specific analysis have been removed.
        * Created the specific analysis base API method covariance_matrix().  This defines the arguments required and what is returned by the method.  It raises the RelaxImplementError for all analyses which do not implement this method.
        * Modified pipe_control.error_analysis.covariance_matrix().  The call to the API covariance_matrix() method now has the model_info argument passed into it.  For the relaxation curve-fitting, this allows the loop over spin systems to be skipped.
        * Shifted the contents of the specific_analysis.relax_fit.estimate_rx_err module into the API.  The estimate_rx_err() function is now the covariance_matrix() method of the specific API.  The code for calculating the covariance matrix and errors are now in the function pipe_control.error_analysis.covariance_matrix(), so this has been removed.  And the error setting is performed by the set_errors() API method, so that code has been deleted as well.
        * Removed the specific_analyses.relax_fit.estimate_rx_err module import.  The module has been merged into the specific API module.
        * Fix for the pipe_control.error_analysis.covariance_matrix() function.  The set_errors() API method is parameter specific, so a loop over the parameters using the get_param_names() API method has been added.
        * Removed the estimate_rx_err module from the specific_analyses.relax_fit.__all__ list.  This module was deleted after merger into the api module.
        * Improved the plotting of correlation plot for intensity.  Now the intensity to error is plotted, which is the correct measure of this data.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Implemented a correlation plot for R2eff values to be plotted for different pipes.  This has the R2eff/R2eff_err plotted, which is the best way to represent this data.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Further improved the plotting of data in repeated analysis.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Added the Relax_disp.test_show_apod_rmsd_dir_to_files system test to the blacklist.  This is if the showApod program is not installed on the machine and allows the test suite to pass.
        * Extended the printout for the skipped tests in the test suite.  As tests using the NMRPipe showApod software are skipped and listed in this table, the text now includes 'software' in the list.
        * Shifted the checks for the Dasha and Modelfree4 software into the system test __init__() method.  This is to bring this into the same design as the relaxation dispersion tests which require the NMRPipe showApod software.  Now the test suite will list either Dasha or Modelfree4 in the skipped test table if they are not installed.
        * Adding another statistic method to plot for multi-data sets.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * More adding of matplotlib snippets for plotting intermediate data.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Changing the range of plotting for statistics.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * More changes to plotting for statistics.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Fix for axis limits when plotting stats.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Fix for globing, to prevent incidentally taking wrong intensity file.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Correction to figure limits.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Implemented writing out of statistics to file.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Adding writing out of PNG files from matplotlib, when looking at statistics.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Another math domain checking, if ref intensity is set to 0.0, then points are skipped, rather than raising an Error.  This can happen for extremely bad dispersion data.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Trying implementing flexibility, when data expected data is missing.  This can be due failing of processing data, where a whole run of data is randomly skipped.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Better check for math domain error in intensity proportionality.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Removal of initialised of dictionary, before data existence have been checked.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Small fix for correct check of missing of data.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Imported the Numdifftools 0.6.0 package into the relax source tree.  This package is extremely useful for testing the implementation of gradients, Hessians, and Jacobians for all relax target functions.  The numerical values from numdifftools can be compared to the directly calculated values.  And for analysis types where the partial derivatives with respect to each model parameter are too complicated to calculated, or the derivatives are very complicated and hence slow, numdifftools can be used to provide a numerical estimate for direct use in the optimisation.  The Numdifftools package is from https://pypi.python.org/pypi/Numdifftools and https://code.google.com/p/numdifftools/.  The current version 0.6.0 has been placed into extern/numdifftools.  This is only the numdifftools package within the official distribution files and the Python package setup.py file and associated files and directories have not been included.  The package uses the New BSD licence (the revised licence with no advertising clause) which is compatible with the GPL v3 licence.
        * Reordered functions in repeated analysis protocol.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Added more check of methods to the system test Relax_disp.test_repeat_cpmg().  This actually shows, that user function relax_disp.r20_from_min_r2eff maybe is broken.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Fix for the testing of method is finished when called.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Turned on minimisation in system test Relax_disp.test_repeat_cpmg().  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * The lib.spectrum.nmrpipe module has been made independent of the relax source code.  This was discussed at http://thread.gmane.org/gmane.science.nmr.relax.scm/23357/focus=7103.  The change allows the software verification tests pass.  The dep_check module cannot be used in the relax lib package.  Only modules from within lib are allowed to be imported into modules of lib.  The fix now allows the full test suite to pass and hence new relax releases are once again possible.
        * Created a document which explains how missing copyrights can be found.
        * Even more improvements to the shell command for finding missing copyrights.
        * Updated the copyright notice for 2014 for all files changed by Edward d'Auvergne.  These were identified using the command in the find_missing_copyrights document.
        * Added numdifftools to the extern package __all__ list.
        * Updated the find_missing_copyrights document.  The matching is now more precise and skips all svnmerge operations.
        * Added the 2014 copyright notice for Troels Linnet to many relax source files.  These were identified as being edited by Troels using the command listed in the find_missing_copyrights document.  The changes include adding "Copyright 2014 Troels E. Linnet" to many files not containing Troels' copyright notice, and extending the 2013 copyright to 2014.
        * Implemented correlation plot of minimisation values.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Changed the missing package/module/software table in the test suite.  This is to allow all names to fit and to update the column titles for software packages.
        * Decreased the accuracy of a check in the Relax_disp.test_estimate_r2eff_err_auto system test.  This is to allow the test to pass on my Windows 7 VM.
        * Added Troels E. Linnet to the COMMITTERS file, which has not been updated in almost 3 years.
        * Created the Structure.test_get_model system test.  This demonstrates that the internal structural object get_model() method is not working as it should.
        * Added a few more checks to the Structure.test_get_model system test.
        * Created the Structure.test_collapse_ensemble system test.  This is used to test a planned feature of the internal structural object.  The collapse_ensemble() method will be created to remove all but one model in the structural ensemble.
        * Modified the Structure.test_collapse_ensemble system test to check the initial values.  This is for sanity reasons as the test coverage of the structure.add_atom user function is poor.
        * Implemented the internal structural object collapse_ensemble() method.  This allows the Structure.test_collapse_ensemble system test to pass.
        * Created a basic text based progress meter in the new lib.text.progress module.  This is taken from the script test_suite/shared_data/frame_order/cam/generate_base.py.
        * Modifications to the User_functions.test_structure_add_atom GUI test.  As lists of lists are now accepted by the structure.add_atom user function, the operation in the GUI is now significantly different.  Therefore many checks have been removed from the GUI test.
        * Updated the minimum minfx dependency version number from 1.0.9 to 1.0.11 in the dep_check module.  This newest version handles infinite target function values preventing optimisation from continuing forever (https://gna.org/forum/forum.php?forum_id=2477).  The 1.0.10 version is also useful as there is full support for gradients and Hessians in the log-barrier constraint algorithm (https://gna.org/forum/forum.php?forum_id=2475).
        * Shifted the specific_analyses.relax_disp.variables module into lib.dispersion.  This is both to minimise circular dependencies, as previously the specific_analyses.relax_disp modules import from target_functions.relax_disp and vice-versa, and to allow the relax library functions to have access to these variables.  This follows from a similar change to the frame order analysis in the frame_order_cleanup branch.
        * Dependency fix for the auto_analyses.relax_disp_repeat_cpmg module.  This was causing relax to fail.  SciPy is an optional dependence for relax, but this module caused relax to not start if scipy was not installed.  This was detected by testing relax with PyPy.
        * Implemented writing out of particular correlation plots to file.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Created a special internal structural object selection object.  This will be used for massively speeding up the internal structural object.  The use of the lib.selection module by the internal structural object is currently very slow as a huge number of calls to re.search() are required.  The idea is to avoid this by using lib.selection once to populate this new selection object, and then reusing this object to loop over molecules and atoms.
        * Added the selection() method to the internal structural object.  This parses the atom ID string using the lib.selection module, loops over the molecules and atoms, performs matches using re.search() via lib.selection, and populates and returns the new Internal_selection object.  This can be used to pre-process the atom ID string to save huge amounts of time.
        * The internal structural object validate_models() method now accepts the verbosity argument.  This is used to silence printouts.
        * Fixes for the new structural object Internal_selection object.  The atom indices are not stored via the molecule index.
        * Converted the rotate() and translate() structural object methods to use the new selection object.  The atom_id arguments have been replaced with selection arguments.  Therefore all parts of relax which call these methods must first call selection() to obtain the Internal_selection instance.
        * Created the structural object Internal_selection.mol_loop() method.  This is to simply quickly loop over all molecule indices of the selection object.
        * Converted all structural object methods to use the selection object rather that atom ID strings.  This should have a significant impact on the speed of certain operations within relax.  The most obvious effect will be a huge speed up of the interatom.define user function.  There should be speed ups with a number of other user functions relating to structural information.  All parts of relax have been updated for the change.
        * Implemented the sampling sparseness instead of NI on the graph axis.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Massive speed up of the internal structural object add_model() method.  This speeds up the structure.add_model user function, as well as many internal relax operations on the structural object.  Instead of using the copy.deepcopy() function to duplicate an already existing structural model, now new molecule container objects are created and then the individual elements of the original molecule container data lists are copied one by one.  This avoids copying a lot of internal Python junk and hence the copying operation is now orders of magnitude faster.
        * Created the new --no-skip relax command line option.  This is a debugging option specifically designed for relax developers.  It allows all blacklisted tests to be executed, i.e. all blacklists are ignored.  These tests would normally be skipped, however this option enables them.
        * Fix for the test suite summary printout function for the new --no-skip option.  The relax status object was clashing with a variable of the same name.
        * Reactivated the Relax_disp.test_m61b_data_to_m61b system test, but blacklisted it.  This will allow the test to be executed if the --no-skip command line option is used.
        * Created the Bmrb.test_bug_22703_display_empty system and GUI test.  This system test catches bug #22703 (https://gna.org/bugs/?22703), the failure of the bmrb.display user function with an AttributeError when no data is present.  It is simultaneously a system and GUI test, as the GUI test class inherits directly from the system test class.
        * Created the pipe_control.spectrometer.check_setup() function.  This follows the design on the wiki page http://wiki.nmr-relax.com/Relax_source_design.  This is for checking if spectrometer information has been set up.
        * Created the RelaxNoFrqWarning warning class for warning that no spectrometer information is present.
        * Renamed the pipe_control.spectrometer.check_setup() function to check_spectrometer_setup().  This is so it can be used without confusion outside of the module.
        * Fix for a broken elif block in the new pipe_control.spectrometer.check_spectrometer_setup() function.
        * The model-free bmrb_write() API method now checks for spectrometer information.  This is via a call to the pipe_control.spectrometer.check_spectrometer_setup() function.
        * Modified the Bmrb.test_bug_22703_display_empty system/GUI test to catch the RelaxNoFrqError.
        * Created a special Check class based on the strategy design pattern.  This is in the new lib.checks module.  The class will be used to simplify and unify all of the check_*() functions in the pipe_control and specific_analyses packages.
        * Converted the pipe_control.spectrometer.check_*() functions to the strategy design pattern.  These are now passed into the lib.checks.Check object, and the original functions are now instances of this class.
        * Alphabetical ordering of all functions in the pipe_control.pipes module.
        * Changed the design of the Check object in lib.checks.  The design of the checking function to call has been modified - it should now return either None if the check passes or an instantiated RelaxError object if not.  This is then used to determine if the __call__() method should return True (when None is received).  Otherwise if escalate is set to 1, the text from the RelaxError object is sent into a RelaxWarning and False is returned.  And if escalate is set to 2, then the error object is simply raised.
        * Updated the pipe_control.spectrometer.check_*_func() functions to use the new design.
        * Implemented the writing out of parameter values between comparison of NI level.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Fixes for the lib.checks.Check object.  The __call__() method keyword arguments **kargs needs to be processed inside the method to strip out the escalate argument.
        * The default value of the escalate argument of the Check.__call__() method is now 2.  This will cause the calls to the check_*() function/objects to default to raising RelaxErrors.
        * Changed the behaviour of the lib.checks.Check object again.  This time the registered function is stored rather than converted into a class instance method.  That way the check_*() function-like objects do not need to accept the unused 'self' argument.
        * The data pipe testing function has been converted to the strategy design pattern of the Check object.  The function pipe_control.pipes.test() has also been renamed to check_pipe().
        * Created the Bmrb.test_bug_22704_corrupted_state_file system test.  This is to catch bug #22704 (https://gna.org/bugs/?22704), the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions.
        * Implemented getting the statistics for parameters and comparing to init NI.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Implemented writing and plotting of statistics for individual and clustered fitting, comparing to full NI.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Added checks to the Bmrb.test_bug_22704_corrupted_state_file system test.  This is to see if the cdp.exp_info data structure has been correctly restored from the save file.
        * Uncommented some checks in the Bmrb.test_bug_22704_corrupted_state_file system test.
        * For relaxation dispersion, modified that the Grid search and linear constraints for parameter "k_AB" is between 0-100.  The parameter is only used in the TSMFK01 model.  The "k_AB" parameter is only for very slow forward exchange rate.  The expected values should according to the reference paper:   Tollinger, M., Skrynnikov, N. R., Mulder, F. A. A., Forman-Kay, J. D., and Kay, L. E. (2001).  Slow dynamics in folded and unfolded states of an sh3 domain. J. Am. Chem. Soc., 123(46), 11341-11352. (10.1021/ja011300z)  The paper concerns values of k_AB in the region 0.1 to 5.0.  If the exchange rate is any higher value of this, then another model should be used for the analysis.
        * Set the default insignificance value to 0.0 instead of 1.0.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Modified the grid search limits for parameter "k_AB" to be between 0.1 and 20.0 rad.s^-1.  This is for the TSMFK01 model, where values much above 10/20 is not expected.
        * Implemented counting of outliers for statistics.  This is to get a better feeling why some statistics are very much different between NI.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Created the Structure.test_mean system test.  This is to test the functionality of a planned new feature, the structure.mean user function.  This is an analysis aid that will calculate the mean structure from all loaded models.
        * Implemented the structure.mean user function frontend.  The backend is currently just a stub function.
        * Fixes and simplifications for the pipe_control.pipes.check_pipe() checking object.  One of the RelaxError classes were not initialised and the docstring was incorrect.
        * Created the pipe_control.structure.main.check_structure() checking object.  This will be used for providing much more detailed feedback for when structural information is missing.
        * Converted all of the pipe_control.structure.main functions to use the check_structure() object.  This standardises and improves all of the checks.
        * Some fixes and additional checks for the Structure.test_mean system test.
        * Implemented the backend of the structure.mean user function.  This primarily occurs within the internal structural object in the new mean() method.  The pipe_control.structure.main.mean() function simply checks if the current data pipe is correctly set up and then calls the structural object mean() method.
        * Created the Structure.test_align system test.  This will be used to test the yet to be implemented structure.align user function.  This user function will be similar to the structure.superimpose user function but will be designed so that structures with different primary and atomic sequences can be superimposed.
        * Created the frontend of the structure.align user function.  This is almost the same as that of the structure.superimpose user function except that the pipes argument has been added and the titles and description changed to indicate the differences.
        * Registered the new user function argument type 'int_list_of_lists' in the prompt UI.  This is to allow for lists of lists of integers, as used for the model argument in the new structure.align user function.
        * Modified the lib.arg_check.is_int_list() function to accept the list_of_lists Boolean argument.  This updates the function to have the same functionality as is_str_list(), allows for lists of lists of int to be checked.
        * Extended the Structure.test_align system test to throughly check the structural data.  This includes changing the structure.align user function call to use 'fit to first' and carefully checking the new atomic coordinates.
        * Modified the Structure.test_align system test so that translations and rotations match the algorithm.  This allows the output of the structure.align user function to be checked to see if the rotation matrix and translation vector found match that used to shift the original structures.
        * Implemented the structure.align user function backend.  This is similar to the structure.superimpose user function, however the coordinate data structure only contains atoms which are in common to all structures.
        * The pipe_control.structure.main functions translate() and rotate() now accept the pipe_name argument.  This is used to translate and rotate structures in different data pipes, as required by the structure.align user function.
        * The pipe_control.structure.main.check_structure() checking object now accepts the pipe_name argument.  This allows structural data to be checked for in different data pipes without having to switch to them.
        * Modified the Structure.test_align system test to call the structure.write_pdb user function.  This sets the file name to sys.stdout so that the original structure and the final aligned structures are output to STDOUT for debugging purposes.
        * Created the Structure.test_delete_atom system test.  This is used to test the deletion of a single atom using the structure.delete user function.
        * Expanded the Structure.test_delete_atom system test.  This is to show that the structure.write_pdb user function fails after a call to the structure.delete user function to delete individual atoms.
        * Fix for the new structure.align user function.  The translation and rotation of the structures at the end to the aligned positions was being incorrectly performed.
        * Loosened some checks in the Structure.test_align system test to allow it to pass.  Some self.assertEqual() checks for the atomic coordinates have been replaced by self.assertAlmostEqual() to allow for small machine precision differences.
        * Modified the lib.arg_check.is_str_or_inst() to handle cStringIO objects.  This allows sys.stdout to be used as a file object in the relax test suite.
        * Modified the lib.arg_check.is_str_or_inst() function to work with Python 3.  Instead of checking for cStringIO.OutputType, which does not exist in Python 3, the argument is simply checked to see if it has a write() method.
        * Print out of the number of all R2eff points, if they are different between analysis.  This can become an issue if a single intensity point has slipped into noise, due to low quality of spectrum reconstruction.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Implemented statistics for R2eff values.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Added data checks and printouts to the structure.align user function.  The data checks are to prevent the user from attempting an alignment with differently named molecules, as this will not work.
        * Implemented writing out intensity and error correlations plot.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Implemented writing out of intensity statistics.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Expanded the structure.com user function to accept the atom_id argument.  This allows the centre of mass (CoM) calculation to be restricted to a certain subset of atoms.  The backend already had support for this feature, but now it is exposed in the frontend.  The user function docstring has been slightly modified as well.
        * Skipping of intensity calculation, if the intensity pipe does not exists.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Added example CPMG data, which could possibly be sent for BMRB submission.  The data is un-published CPMG data, related to the paper:  Webb H, Tynan-Connolly BM, Lee GM, Farrell D, O'Meara F, Soendergaard CR, Teilum K, Hewage C, McIntosh LP, Nielsen JE (2011).  Remeasuring HEWL pK(a) values by NMR spectroscopy: methods, analysis, accuracy, and implications for theoretical pK(a) calculations.  Proteins: Struct., Funct., Bioinf. 79(3), 685-702, DOI 10.1002/prot.22886.  Task #7858 (https://gna.org/task/?7858): Make it possible to submit CPMG experiments for BMRB.
        * Added system test Relax_disp.test_bmrb_sub_cpmg() to try calling the bmrb functions in relax.  Task #7858 (https://gna.org/task/?7858): Make it possible to submit CPMG experiments for BMRB.
        * Implemented the initial part of the API, to collect data for BMRB submission.  Task #7858 (https://gna.org/task/?7858): Make it possible to submit CPMG experiments for BMRB.
        * Inserted a "RelaxImplementError" when trying to call bmrb_write from a relaxation dispersion analysis.  To implement the function, it would require a re-write of the relax_data bmrb_write(star) function, and proper handling of cdp.ri_ids.  It was also not readily possible to find examples of submitted CPMG data in the BMRB database.  This makes it hard to develop, and even ensure that BMRB would accept the format.  Task #7858 (https://gna.org/task/?7858): Make it possible to submit CPMG experiments for BMRB.
        * Removed the system test Relax_disp.test_bmrb_sub_cpmg() to be tested in the test-suite.  This test will not be implemented, as it requires a large re-write of data structures.  Task #7858 (https://gna.org/task/?7858): Make it possible to submit CPMG experiments for BMRB.
        * Removed the showing of Matplotlib figures in the test suite.  Task #7826 (https://gna.org/task/index.php?7826): Write a Python class for the repeated analysis of dispersion data.
        * Implemented system test Relax_disp.test_dx_map_clustered to catch the missing creation of a point file.  Bug #22753 (https://gna.org/bugs/index.php?22753): dx.map does not work when only 1 point is used.
        * Inserted a check in system test Relax_disp.test_dx_map_clustered, that a call to minimise.calculate should be the same as the file stored with the clustered chi2 value.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Made initial preparation to loop over clustered spins and IDs for the minimise.calculate user function call.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Implemented looping over spin-clusters when issuing a minimise.calculate().  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Made back_calc_r2eff() in optimisation module use the spin and ID list instead.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Fix for graph plotting functionality to send spins as list of one spins.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Fix for calling back_calc_r2eff with the new argument keywords, and use list of spin and spin IDs.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Fix for synthetic script calling back_calc_r2eff() with old arguments and to use list of spin containers and IDs.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Inserted last test in test_dx_map_clustered, to check out the written chi2 values are as expected.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Moved the looping over cluster spin IDs into its own function in the API.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Added the selection string for all the cluster IDs to be parsed back as well.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Made the value set function, set values to all spins, if it is a global parameter.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Moved the skipping of protons away from looping function.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Inserted some testing lines for making a dx_map, either global clustered or as a free spin.  There is a big difference which dx map you get.  It illustrates beautifully the effect of clustering things together.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Added a BMRB NMR-STAR formatted deposition file for the OMP model-free data for reference.  This is because there are no other NMR-STAR formatted files in the relax sources.
        * In the dispersion API calculate(), used the API function model_loop() to loop over the clusters instead.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Removed then function loop_cluster_ids() from dispersion API().  This should be implemented elsewhere.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Updated the API set_param_values() function to use model_loop() to get the spin_ids from the cluster.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Initial try to fix unit test test_value_set_r1_rit().  The problem is that no spin ID can be generated since the spins are created manually.  "AttributeError: 'MoleculeContainer' object has no attribute '_res_name_count' ".  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Removed the checking of MODEL_LIST_MMQ, and spin.isotope from optimisation.back_calc_r2eff(), since this check is already covered.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Fix for references to "spin" in optimisation.back_calc_r2eff().  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Fix for looping performed twice in relax_disp API model_loop().  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Removed unused proton reference in relax_disp API calculate().  There is though some problems with these tests (F 1.93 s for Relax_disp.test_korzhnev_2005_15n_dq_data, F 2.01 s for Relax_disp.test_korzhnev_2005_1h_mq_data, F 1.93 s for Relax_disp.test_korzhnev_2005_1h_sq_data).  It is unsure where these comes from.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Fix for epydoc in system test Relax_disp.test_dx_map_clustered.
        * Updated all of the Relax_disp.test_korzhnev_2005_*_data system tests.  These now have slightly changed parameter values due to the fix of bug #22563 (https://gna.org/bugs/?22563), the NS MMQ 2-site dispersion model running at 32-bit precision and not 64-bit as it should be.
        * Epydoc change for DOI reference in system tests.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Added some test PyMOL scripts to create OpenDX maps and chi2 surface plots.  These will go to the wiki: http://wiki.nmr-relax.com/Chi2_surface_plot.
        * Big improvement for running the relax unit tests via the relax command line options.  The unit test module path is now accepted as a command line option.  This brings more capabilities of Gary Thompson's test_suite/unit_tests/unit_test_runner.py script into the relax command line.  The _pipe_control/test_value unit test module path can be specified as, for example, one of 'test_suite.unit_tests._pipe_control.test_value', 'test_suite/unit_tests/_pipe_control/test_value', '_pipe_control.test_value', '_pipe_control/test_value'.  This allows individual modules of tests to be run, rather than having to execute all unit tests, which is very useful for debugging.
        * Modified the printouts for the unit tests when running with the --time command line option.  The test name is now being processed.  The leading 'test_suite.unit_tests.' text is now stripped out.  And the remaining text is split into the module name and the test name.  This is to allow the unit test module name to be more easily identifiable, so it can then be used as a command line option to allow only a subset of tests to be performed.
        * Modified the help strings for the test suite options shown when 'relax -h' is run.  The ability to specify individual tests (or modules of tests for the unit tests) is now documented.  The '--time' option help string has also been edited.
        * Fix for the Bmrb.test_bug_22704_corrupted_state_file GUI test.  This was failing because the setUp() method in the inherited Bmrb system test module was being overwritten by the default Unittest.setUp() method.  Therefore the system test setUp() method has been copied into the GUI test class.
        * Fix for the Test_value.test_value_set_r1_rit test of the _pipe_control.test_value unit test module.  This is a general fix for all unit test modules which use the test_suite.unit_tests.value_testing_base.Value_testing_base base class.  After the molecules, residues and spins are manually created, the pipe_control.mol_res_spin.metadata_update() function is called to make sure that all of the private and volatile metadata have been correctly created, so that the other pipe_control.mol_res_spin module functions can operate correctly.
        * Removal of repetitive code in the relaxation dispersion model_loop() API method.  The spin loop does not need to be called twice, instead the if statements have been modified to better direct the code execution.
        * Added script to simulate dispersion profiles at different settings.  This shows that something is wrong.  The back-calculated values in the graphs are not equal to the interpolated values.  There must be something wrong somewhere.  This list shows the chi2 values and, judging from the dispersion graphs, this simply cannot be true.
        * Changed bounds for sample scripts to create: 3D iso-surface plot, surface plot and simulation of dispersion curves.
        * Minor changes to Python matplotlib script, to produce surface plot.  Also added the new data for the plotting.
        * Modified the example data, after issue with parameters was fixed.


    Bugfixes:
        * Fix for two-point calculation of exponential curve with corrupted data.  The two-point calculation is now also skipped, if the measured intensity is 0.  This can happen for corrupted intensity files.
        * Fix for the internal structural object get_model() method - it now actually returns the model.
        * Fixes for the structure.add_atom user function to allow for list of lists for the atomic position.  This allows different coordinates to be supplied for each model.
        * Added safety checks for NaN values to the lib.structure.pdb_write module.  This is within the _record_validate() function.  The check prevents the creation of invalid PDB files.
        * Fix for the experimental information data pipe object when converting to XML state and results files.  This is a partial fix for bug #22704 (https://gna.org/bugs/?22704), the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions.  The names and descriptions for the software, citation and script list objects were incorrectly set.  These have been fixed so that the name of the data structure and the real description is present in the XML state or results file instead of <relax_list desc='relax list container'>.
        * Fix for the experimental information data pipe object when converting to XML state and results files.  This is a partial fix for bug #22704 (https://gna.org/bugs/?22704), the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions.  The names and descriptions for the software, citation and script list objects were incorrectly set.  These have been fixed so that the name of the data structure and the real description is present in the XML state or results file instead of <relax_list desc='relax list container'>.
        * Fix for the cdp.exp_info.software data structure setup.  This is a partial fix for bug #22704 (https://gna.org/bugs/?22704), the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions.  The Element data container name was being replaced by the software name, making it impossible to restore from the XML.
        * Implemented the cdp.exp_info.from_xml() method to correctly restore the experimental info structure.  This fixes bug #22704 (https://gna.org/bugs/?22704), the corrupted relax state files after setting the relax references via the bmrb.software, bmrb.display, or bmrb.write user functions.  This custom ExpInfo.from_xml() method is required to properly recreate the software, script and citation list data structures of the cdp.exp_info data structure, as these are special RelaxListType objects populated by Element objects (both from data_store.data_classes).
        * Bug fix for the structure.delete user function.  When individual atoms are deleted, the bonded atom data structure is no correctly updated to remove the now non-existent atom.
        * Another bug fix for the structure.delete user function when deleting individual atoms.  The bonded atom data structure consisting of indices requires all indices after the deleted atom to be decremented by 1.
        * Bug fix for the CONECT records created by the structure.write_pdb user function.  The atom numbers inside the structural object were being used for the CONECT records rather than the atom numbers used within the PDB file.
        * Fix for writing out point files, when only one point is used.  The code was testing for > 1 points to be present, before writing out point files.  Bug #22753 (https://gna.org/bugs/index.php?22753): dx.map does not work when only 1 point is used.
        * Fix for bug #22563 (https://gna.org/bugs/?22563).  This is the NS MMQ 2-site dispersion model running at 32-bit precision and not 64-bit as it should be.  The numpy.complex64 32-bit types have been replaced by numpy.complex128 in the lib.dispersion.ns_mmq_2site module.
        * Critical fix for k_AB not belonging to list of global parameters.  k_AB was only changed to the spin of interest, but not for the rest of the cluster.  When the parameter vector is assembled,  "assemble_param_vector(spins=spins)" it takes the global parameter from spin 0.  Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate user function does not calculate chi2 value for clustered residues.
        * Improvements for PDB creation in the relax library for out of bounds structural coordinates.  The lib.structure.pdb_write module atom() and hetatm() functions will now more gracefully handle atomic coordinates which are outside of the PDB limits of [-999.999, 9999.999].  When such coordinates are encountered, instead of producing a too long PDB line which does not pass the validation step, the functions will set the coordinates to the boundary value.  This will at least allow a valid PDB file to be created, despite the warping of the coordinates.
        * Expanded the list of global dispersion parameters in the set_param_values() API method.  This is a quick expansion of Troels' fix for the k_AB parameter to allow for the release of relax 3.3.1.  This is a small part of the discussion at http://thread.gmane.org/gmane.science.nmr.relax.scm/23948/focus=7188.



Version 3.3.0
(3 September 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.3.0

    Features:
        * Huge speed ups for all of the relaxation dispersion models ranging from 1.452x to 163.004x times faster.  The speed ups for the clustered spin analysis are far greater than for the single spin analysis.
        * Implementation of a zooming grid search algorithm for optimisation in all analyses.  This includes the addition of the minimise.grid_zoom user function to set the zoom level.  The grid width will be divided by 2**zoom_level and centred at the current parameter values.  If the new grid is outside of the bounds of the original grid, the entire grid will be translated so that it lies entirely within the original.
        * Increased the amount of user feedback for the minimise.grid_search user function.  Now a comment for each parameter is included in the printed grid search setup table.  This includes if the lower or upper bounds, or both, have been supplied and if a preset value has been used instead.
        * Expanded support for R1rho 2D graph plotting in the relax_disp.plot_disp_curves user function as the X-axis can now be the nu1 value, the effective field omega_eff, or the rotating frame title angle.  And the plots are interpolation over the spin-lock offset.
        * Ability to optimise the R1 relaxation rate parameter in the off-resonance relaxation dispersion models.
        * Creation of the relax_disp.r1_fit user function for activating and deactivating R1 fitting in the dispersion analysis.
        * Better tab completion support in the prompt UI for Mac OS X users.  For some Python versions, the Mac supplied libedit library is used rather than GNU readline.  But this library uses a completely different language and hence tab completion was non-functional on these systems.  The library difference is now detected and the correct language sent into libedit to activate tab completion.
        * Created the time user function.  This is just a shortcut for printing out the output of the time.asctime() function.
        * The value.copy user function now accepts the force flag to allow destination values to be overwritten.
        * Expanded model nesting capabilities in the relaxation dispersion auto-analysis to speed up the protocol.
        * The spin-lock offset is now included in the spectra list GUI element for the relaxation dispersion analysis.
        * Creation of the relax_disp.r2eff_estimate user function for the fast estimation of R2eff/R1rho values and errors when full exponential curves have been collected.  This experimental feature uses linearisation to estimate the R2eff and I0 parameters and the covariance matrix to estimate parameter errors.
        * Gradients and Hessians are implemented for the exponential curve-fitting, hence all optimisation algorithms and constraint algorithms are now available for this analysis type.  Using Newton optimisation instead of Nelder-Mead Simplex can save over an order of magnitude in computation time.  This is also available in the relaxation dispersion analysis.
        * The minimisation statistics are now being reset for all analysis types.  The minimise.calculate, minimise.grid_search, and minimise.execute user functions now all reset the minimisation statistics for either the model or the Monte Carlo simulations prior to performing any optimisation.  This is required for both parallelised grid searches and repetitive optimisation schemes to allow the result to overwrite an old result in all situations, as sometimes the original chi-squared value is lower and the new result hence is rejected.
        * Large expansion of the periodic table information in the relax library to include all elements, the IUPAC 2011 standard atomic weights for all elements, mass numbers and atomic masses for all stable isotopes, and gyromagnetic ratios.
        * Significant improvements to the structure centre of mass calculations by using the new periodic table information - all elements are now supported and exact masses are now used.
        * Added a button to the spectra list GUI element for the spectrum.error_analysis user function.  This is placed after the 'Add' and 'Delete' buttons and is used in the NOE, R1 and R2 curve-fitting and relaxation dispersion analyses.
        * RelaxErrors are now raised in the prompt or script UI if an old user function is called, printing out the names of the old and new user functions.  This is for help in upgrading old scripts and is currently for the calc(), grid_search(), and minimise() user function calls.


    Changes:
        * Improved model handling for the internal structural object.  The set_model() method has been added to allow either a model number to be set to the first unnumbered model (in preparation for adding new models) or to allow models to be renumbered.  The logic of the add_model() has also been changed.  Rather than looping over all atoms of the first model and copying them, which does not work due to the model validity checks, the entire MolList (molecule list) data structure is copied using copy.deepcopy() to make a perfect copy of the structural data.  The ModelList.add_item() method has also been modified to return the newly added or numbered model.  This is used by the add_model() structural object method to obtain the model object.
        * Updated the Mac OS X framework setting up instruction document.  New sections have been added for the nose and matplotlib Python packages, as nose is needed for the numpy and scipy testing frameworks and matplotlib might be a useful optional dependency in the future.  The mpy4py section has been updated to avoid the non-framework fink version of mpicc which cannot produce universal binaries.  A few other parts also have small edits.
        * Removed the Freecode section from the release checklist as Freecode has been permanently shut down.  The old relax links are still there (http://freecode.com/projects/nmr-relax), but Freecode is dead (http://freecode.com/about).
        * Fix for the internal structural object MolContainer.last_residue() method.  This can now operate when no structural information is present, returning 0 instead of resulting in an IndexError.
        * Updated the script for finding unused imports in the relax source code.  Now the file name is only printed for Python files which have unused imports.
        * Completely removed all mentions of Freecode from the release document.  The old relax links are still there (http://freecode.com/projects/nmr-relax), but Freecode is dead (http://freecode.com/about).
        * Updated the minfx version in the release checklist document to 1.0.8.  This version has not been released yet, but it will include important fixes and additions for constrained parallelised grid searches.
        * Fix for a broken link in the development chapter of the relax manual.
        * Fixes for dead hyperlinks in the relaxation dispersion chapter of the relax manual.  The B14 model links to http://www.nmr-relax.com/api/3.2/lib.dispersion.b14-module.html were broken as the B in B14 was capitalised.
        * Sent in the verbosity argument value to the minfx.grid.grid_split() function.  The minfx function in the next release (1.0.8) will now be more verbose, so this will help with user feedback when running the model-free analysis on a cluster or multi-core system using MPI.
        * The time user function now uses the chronometer Oxygen icon in the GUI.
        * Removed the line wrapping in the epydoc parameter section of the optimisation function docstrings.  This is for the pipe_control.minimise module.
        * More docstring line wrapping removal from pipe_control.minimise.
        * Bug fix for the parameter units descriptions.  This only affects a few rare parameters.  The specific analysis API parameter object units() method was incorrectly checking if the units value is a function - it was checking the parameter conversion factor instead.
        * Modified the align_tensor.init user function so that the parameters are now optional.  This allows alignment tensors to be initialised without specifying the parameter values for that tensor.
        * Modified profiling script to have different number of NCYC points per frequency.  This is to complicate the data, so any erroneous reshaping of data is discovered.  It is expected, that experiments can have different number of NCYC points per spectrometer frequency.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Initial try to alter the target function calc_CR72_chi2.  This is the first test to restructure the arrays, to allow for higher dimensional computation.  All numpy arrays have to have same shape to allow to multiply together.  The dimensions should be [ei][si][mi][oi][di]. [Experiment][spins][spec. frq][offset][disp points].  This is complicated with number of disp point can change per spectrometer frequency.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.  This implementation brings a high overhead.  The first test shows no winning of time.  The creation of arrays takes all the time.
        * Temporary changed the lib/dispersion/cr72.py function to unsafe state.  This change turns-off all the safety measures, since they have to be re-implemented for higher dimensional structures.
        * Altered profiling script to report cumulative timings and save to temporary files.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.  This indeed shows that the efficiency has gone down.
        * Added print out of chi2 to profile script.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the creation of special numpy structures outside target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script to calculate correct values when setting up R2eff values.  This is to test, that the return of chi2 gets zero.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removing looping over exp and offset indices in calc_chi2.  They are always 0 anyway.  This brings a little speed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * In profiling script, moved up the calculation of values one level.  This is to better see the output of the profiling iterations for CR72.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for calculation of the Larmor frequency per spin in profiling script.  The frq loop should also be up-shifted.  It was now extracted as 0.0.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Re-inserted safety checks in lin/dispersion/CR72.py file.  This is re-inserted for the rank_1 cases.  This makes the unit-tests pass again.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Important fix for extracting the correct shape to create new arrays.  If using just one field, or having the same number of dispersion points, the shape would extend to the dispersion number.  It would report [ei][si][mi][oi][di] when calling ndarray.shape.  Shape always has to be reported as: [ei][si][mi][oi].  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made it easier to switch between single and cluster reporting in profiling script.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Important fix for the creation of the multi dimensional pA numpy array.  It should be created as numpy.zeros([ei][si][mi][oi]) instead of numpy.ones([ei][si][mi][oi]).  This allows for rapid testing of all dimensions with np.allclose(pA, numpy.ones(dw.shape)).  pA can have missing filled out values, when the number of dispersion points are different per spectrometer frequency.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added unit tests demonstrating edge cases 'no Rex' failures of the model 'CR72 full', for a clustered multi dimensional calculation.  This is implemented for one field.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange:   Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Re-implemented safety checks in lib/dispersion/cr72.py.  This is now implemented for both rank-1 float array and of higher dimensions.  This makes the unit tests pass for multi dimensional computing.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added unit tests demonstrating edge cases 'no Rex' failures of the model 'CR72 full', for a clustered multi dimensional calculation.  This is implemented for three fields.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange:  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed that special numpy structure is also created for "CR72".  This makes most system tests pass.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Critical fix for the slicing of values in target function.  This makes system test: Relax_disp.test_sod1wt_t25_to_cr72 pass.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added self.has_missing keyword in initialization of the Dispersion class.  This is to test once, per spin or cluster.  This saves a looping over the dispersion points, when collection the data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Created multi dimensional error and value numpy arrays.  This is to calculate the chi2 sum much faster.  Reordered the loop over missing data points, so it is only initiated if missing points is detected.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Switch the looping from spin->frq to frq->spin.  Since the number of dispersion points are the same for all spins, this allows to move the calculation of pA and kex array one level up.  This saves a lot of computation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed all the creation of special numpy arrays to be of float64 type.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the data filling of special numpy array errors and values, to initialization of Dispersion class.  These values does not change, and can safely be stored outside.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Just a tiny little more speed, by removing temporary storage of chi2 calculation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made copies of numpy arrays instead of creating from new.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added a self.frqs_a as a multidimensional numpy array.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Small fix for the indices to the errors and values numpy array.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Lowered the number of iterations to the profiling scripts.  This is to use the profiling script as bug finder.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the calculation of dw_frq out of spin and spectrometer loop.  This is done by having a special 1/0 spin numpy array, which turns on or off the values in the numpy array multiplication.  The multiplication needs to first axis expand dw, and then tile the arrays according to the numpy structure.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the calculation of pA and kex out off all loops.  This was done by having two special 1/0 spin structure arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed dw_frq_a numpy array, as it was not necessary.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed all looping over spin and spectrometer frequency.  This is the last loop! Wuhu.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Reordered arrays for beauty of code.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the back_calc array be initiated as copy of the values array.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Small edit to profiling script, to help bug finding.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fixed that arrays are correctly initiated with one or zero values.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Very important fix, for only replacing part of data array which have Nan values.  Before, all values were replaced, which was wrong.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Needed to increase the relative tolerance when testing if pA array is 1.  Now system test Relax_disp.test_hansen_cpmg_data_missing_auto_analysis passes.  Also added some comments lines, to prepare for mask replace of values.  For example if only some of etapos values should be replaced.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Restored profiling script to normal.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the logic and comments much clearer about how to reshape, expand axis, and tile numpy arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented a masked array search for where "missing" array is equal 1.  This makes it possible to replace all values with this mask, from the value array.  This eliminates the last loops over the missing values.  It took over 4 hours to figure out, that the mask should be called with mask.mask, to return the same fulls structure,  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Yet another small improvement for the profiling script.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the multi dimensional structure of pA.  pA is not multi-dimensional, and can just be multiplied with numpy arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for testing of pA in lib function, when pA is just float.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified unit tests, so pA is sent to target function as float instead of array.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the multi dimensional structure of kex.  kex is not multi-dimensional, and can just be multiplied with numpy arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for testing of kex in lib function, when kex is just float.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified unit tests, so kex is sent to target function as float instead of array.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Important fix for replacing values if eta_pos > 700 is violated.  This fixes system test: Relax_disp.test_sod1wt_t25_to_cr72, which failed after making kex to a numpy float.  The trick is to make a numpy mask which stores the position where to replace the values.  Then replace the values just before last return.  This makes sure, that not all values are changed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Increased the kex speed to 1e7 in clustered unit tests cases.  This is to demonstrate where there will be no excange.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added a multi-dimensional numpy array chi2 value calculation function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Called the newly created chi2 function to calculate for multi dimensional numpy arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Renamed chi2_ND to chi2_rankN.  This is a better name for representing multiple axis calculation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made special ei, si, mi, and oi numpy structure array.  This is for rapid speed-up of numpy array creation in target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced self.spins_a with self.disp_struct.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made initialisation structures for dw.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Initial try to reshape dw faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Switched to use self.ei, self.si, self.mi, self.oi, self.di.  This is for better reading of code.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Comment out the sys.exit(), which would make the code fail for wrong calculation of dw.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script for CPMG model CR72 to R1rho DPL94 model.  The framework of the script will be the same, but the data a little different.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Started converting profiling script to DPL94.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced self.(ei,si,mi,oi,di) with self.(NE,NS,NM,NO,ND).  These numbers represents the maximum number of dimensions, instead of index.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added the ei index, when creating the first dw_mask.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Reordered how the structures dw init structures are created.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Clearing the dw_struct before calculation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Started using the new way of constructing dw.  This is for running system tests.  Note, somewhere in the dw array, the frequencies will be different between the two implementations.  But apparently, this does not matter.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Inserted temporary method to switch for profiling.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * First try to speed-up the old dw structure calculation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Simplified calculation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Yet another try to implement a fast dw structure method.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the fastest way to calculate the dw structure.  This uses the numpy ufunc multiply.outer function to create the outer array, and then multiply with the frqs_structure.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Renamed dw temporary structure to generic structure.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Restructured the calculation of R20A and R20B to the most efficient way.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the lib/CR72.py to a numpy multi dimensional numpy array calculation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the catching when dw is zero, to use masked array.  Implemented backwards compatibility with unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Bugfix for testing if kex is zero.  It was tested if kex was equal 1.0.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented masked replacement if fact is less that 1.0.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced isnan mask with function that catches all invalid values.
        * Removed the masked replacement if fact is less than 1.0.  This is very strange, but otherwise system test: Relax_disp.test_hansen_cpmg_data_missing_auto_analysis would fail.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the slow allclose() function to test if R20A and R20B is equal.  It is MUCH faster to just subtract and check sum is not 0.0.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced the temporary variable R2eff with back_calc, and used numpy subtract to speed up.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the lib function into a pure numpy array calculation.  This requires, that r20a, r20b and dw has same dimension as the dispersion points.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changes too unit tests, so data is sent to target function in numpy array format.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the creation of an unnecessary structure by using numpy multiply.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the mask which finds where to replace values into the __init__ function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script for CR72 to B14 model.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script for the B14 model.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified model B14 lib file to faster numpy multidimensional mode.  The implementations comes almost directly from the CR72 model file.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Reverted the use of the mask "mask_set_blank".  It did not work, and many system tests started failing.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the target function to handle the B14 model for faster numpy computation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed unit test for B14 to match numpy input requirement.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added additional tests in b14, when math errors can occur.  This is very easy with a conditional masked search in arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Comment fix for finding when E0 is above 700 in lib function of B14.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed use of "asarray", since the variables are already arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed target function for model CR72.  To CR72 is now also the input of the parameters of R20A, R20B and dw.  dw is tested for zero, to return flat lines.  It is faster to search in the smaller numpy array, than the 5 dimensional dw array.  This is for speed-up.  R20A and R20B is also subtracted, to see if the full model should be used.  In the same way, it is faster to subtract the smaller array.  These small tricks are expected to give 5-10 pct. speed-up.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the lib function of CR72 accept the R20A, R20B and dw of the original array.  This is for speed-up.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed unit-tests, to send in the original R20A, R20B and dw_orig to the testing of the lib function CR72.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed profiling script to send R20A, R20B and dw, as original parameters to the lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed target function for model B14.  To B14 now also send the input of the original parameters dw.  dw is tested for zero, to return flat lines.  It is faster to search in the smaller numpy array, than the 5 dimensional dw array.  This is for speed-up.  These small tricks are expected to give 5-10 pct. speed-up.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the lib function of B14 accept dw of the original array.  This is for speed-up.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed unit-tests, to send in the original dw_orig to the testing of the lib function B14.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed profiling script to send dw as original parameters to the lib function B14.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script for CR72 model to TSMFK01 model.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script to be used for model TSMFK01.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified target function for model TSMFK01, to send in dw as original parameter.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified lib function for model TSMFK01 to accept dw_orig as input and replaced functions to find math domain errors into maske replacements.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made unit tests for model TSMFK01 send in R20A and dw as a numpy array.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Large increase in speed for model TSMFK01 by changing target functions to use multidimensional numpy arrays in calculation.  This is done by restructuring data into multidimensional arrays of dimension [NE][NS][NM][NO][ND], which are number of spins, number of magnetic field strength, number of offsets, maximum number of dispersion point.  The speed comes from using numpy ufunc operations.  The new version is 2.4X as fast per spin calculation, and 54X as fast for clustered analysis.
        * Replacing math domain checking in model DPL94, with masked array replacement.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * First try to speed up model DPL94.  This has not succeeded, since system test: Relax_disp.test_dpl94_data_to_dpl94 still fails.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Trying to move some of the structures into its own part.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for forgetting to multiply frqs to power 2.  This was found by inspecting all print out before and after implementation.  New implementation of DPL94 now passes all system and unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the expansion of the R1 structure out of the for loops.  This is to speed-up the __init__ of the class of the target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the packing of errors and values out of for loop in the __init__ class of target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the multi dimensional expansion of inv_relax_times out of for loop.  This can be done for all structures, which does not have missing points.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * For inv_relax_times, expanded one axis, and tiled up to NR spins, before reshaping and blowing up to full structure.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the expansion of frqs out of for loops.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation fix for description of input arrays to lib functions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Converted TAP03 model to use multi dimensional numpy arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made dw in unit tests of TAP03 be of numpy array.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced the loop structure in target function of TAP03 with numpy arrays.  This makes the model faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Reordered the initialization structure of the special numpy arrays.  This was done in the init part of the target function of relaxation dispersion.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added model MODEL_TSMFK01 also get self.tau_cpmg calculated in init part.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model TP02, has been replaced with numpy masks.  Documentation is also fixed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in dw as numpy array in unit tests of model TP02.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced target function for model TP02, to use higher dimensional numpy array structures.  That makes the model much faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for adding model TP02 to part of init class to initialize preparation of higher dimension numpy structures.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the NOREX model a faster numpy array calculation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed an unnecessary frq_struct in init of target function.  frqs can just be expanded, and back_calc is cleaned afterwards with disp_struct.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model M61, has been replaced with numpy masks.  Documentation is also fixed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in r1rho_prime and phi_ex_scaled as numpy array in unit tests of model M61.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced target function for model M61, to use higher dimensional numpy array structures.  That makes the model much faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model M61b, has been replaced with numpy masks.  Documentation is also fixed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in r1rho_prime and dw as numpy array in unit tests of model M61b.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced target function for model M61b, to use higher dimensional numpy array structures.  That makes the model much faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points to be send to lib function of model TSMFK01.  These are not used anymore.  Also removed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points and pB to be send to lib function of model TP02.  Number of points are not used anymore.  pB is calculated in lib function instead.  Also removed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points and pB to send to lib function of model TP02.  pB is calculated in lib function instead.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points, pB, k_AB, k_BA to be send to lib function of model B14.  Number of points are not used anymore.  pB is calculated in lib function instead.  k_AB, and k_BA are calculated in lib functions instead.  Fixed in target function.  Fixed in lib function.  Fixed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending number of points in target function of TSMFK01.  This was removed in lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points, pB, to be send to lib function of model TAP03.  Number of points are not used anymore.  pB is calculated in lib function instead.  Fixed in target function.  Fixed in lib function.  Fixed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points, to be send to lib function of model CR72.  Number of points are not used anymore.  Fixed in target function.  Fixed in lib function.  Fixed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points, to be send to lib function of model DPL94.  Number of points are not used anymore.  Fixed in target function.  Fixed in lib function.  Fixed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points, to be send to lib function of model M61.  Number of points are not used anymore.  Fixed in target function.  Fixed in lib function.  Fixed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points, to be send to lib function of model M61b.  Number of points are not used anymore.  Fixed in target function.  Fixed in lib function.  Fixed in corresponding unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model MP05, has been replaced with numpy masks.  Number of points has been removed, as the masks utility replaces this.  Calculation of pB, has been moved to lib function for simplicity.  Documentation is also fixed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in dw as numpy array in unit tests of model MP05.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced target function for model MP05, to use higher dimensional numpy array structures.  That makes the model much faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model LM63, has been replaced with numpy masks.  Number of points has been removed, as the masks utility replaces this.  Documentation is also fixed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in number of points in unit tests of model LM63.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced target function for model LM63, to use higher dimensional numpy array structures.  That makes the model much faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for replacement of values with mask, when phi_ex is zero.  This can be spin specific.  System test: Relax_disp.test_hansen_cpmg_data_to_lm63 starts to fail:  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in r20 and phi_ex as numpy array in unit tests of LM63.  This is after using masks as replacement.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * 1 digit decrease in parameter check in system test: Relax_disp.test_hansen_cpmg_data_to_lm63.  It is unknown, why this has occurred.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model IT99, has been replaced with numpy masks.  Number of points has been removed, as the masks utility replaces this.  pB is now moved to be calculated inside.  This makes the lib function simpler.  Documentation is also fixed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in r20 and dw as numpy array in unit tests of IT99.  This is after using masks as replacement.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced target function for model IT99, to use higher dimensional numpy array structures.  That makes the model much faster.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model ns_cpmg_2site_expanded, has been replaced with numpy masks.  Number of points has been removed, as the masks utility replaces this.  pB is now moved to be calculated inside.  This makes the lib function simpler.  k_AB and k_BA is also now calculated here.  Documentation is also fixed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for sending in r20 and dw as numpy array in unit tests of ns_cpmg_2site_expanded.  This is after using masks as replacement.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced target function for model ns_cpmg_2site_expanded, to use higher dimensional numpy array structures.  That makes the model much faster.  I cannot get system test: Relax_disp.test_cpmg_synthetic_dx_map_points to pass.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for system test Relax_disp.test_cpmg_synthetic_dx_map_points.  By just copying self.back_calc_a to self.back_calc, problem was solved.  In specific_analysis.relax_disp.optimisation in function back_calc_r2eff(), the function gets the last values stores in the class function.  This is in "class Disp_result_command(Result_command)" with self.back_calc = back_calc.  And back_calc_r2eff() have return model.back_calc.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Methods to replace math domain errors in model ns_cpmg_2site_3d, has been replaced with numpy masks.  Number of points has been removed, as the masks utility replaces this.  pB is now moved to be calculated inside.  This makes the lib function simpler.  k_AB and k_BA is also now calculated here.  Magnetization vector is also now filled in lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for unit tests of model NS CPMG 2-site 3D to the reduced input to the lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Change to the target function to the model NS CPMG 2-site 3D to use the reduced input to the lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed linked matrix/vector inner products into chained dot expressions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Wrote the essential dot matrix up to be initiated earlier.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Lowered the number of dot iterations, by pre-prepare the dot matrix another round.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Turned Mint vector into a 7,1 matrix, so dimensions fit with evolution matrix.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Lowered the number of dot operations, by pre-preparing the evolution matrix another round.  The power is in system tests always even.  The trick to removing this for loop, would be to make a general multi dot function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the bulk operation of model NS CPMG 2-site 3D into the lib file.  This is to keep the API clean.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the unit test of NS CPMG 2-site 3D, after the input to the function has changed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the target function for NS CPMG 2-site 3D.  This reflects the new API layout.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the lib function of NS CPMG 2-site star, to get input of dw and r20a+r20b of higher dimensional type.  This is to move the main operations from the target function to the lib function, and make the API code clean and consistent.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the target function of NS CPMG 2-site star, to reflect the input to the function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the dot evolution structure faster for NS CPMG 2-site 3D.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the BLAS method of dot product, which should be faster.  I cannot get the "out" argument to work.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Small fix for the dot method.  But the out argument does not work.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the dot method via blas.  This needs a array with one more axis.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Last try to use the out argument.  In the last dotting loop, the out argument wont work, no matter what I do.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Inner product fix in model NS CPMG 2-site 3D.  Fix for system tests: Relax_disp.test_cpmg_synthetic_ns3d_to_b14, Relax_disp.test_cpmg_synthetic_ns3d_to_CR72, Relax_disp.test_cpmg_synthetic_ns3d_to_CR72_noise_cluster.  The number of dotting with Mint, should correspond to the power.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced the temporary structure self.frqs_a to self.frqs, which works for all target functions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced the temporary structure self.cpmg_frqs_a to self.cpmg_frqs, which works for all target functions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Restructured all data structures into higher dimension in target function.  Fix for the input to the different models.  Restructured how to detect the number of offset and dispersion points.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Various index fixes, after the data structures have been reordered.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for unit test, where the dimension of points has to be one lower.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for plotting, since the back_calc now can hold more data points that cpmg frequencies.  This is because the numpy array has been expanded to the maximum number of points.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented a frqs_squared calculation in the init of target function.  This is to speed up the calculations.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Restructured frqs_H to higher dimension in target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the calculation of dw and dwH out of for loops for model MMQ CR72.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed looping over spin and frequencies for model MMQ CR72.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Temporary removed check for dw = 0.0 in MMQ CR72.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed number of points to be parsed to model MMQ CR72.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed power to be parsed to MMQ CR72, since it is not used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed MMQ CR72 to use multi dimensional data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed unit test of MMQ CR72 to pass.  dw needs to be of numpy structure.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the calculation of dw out of for loops for model NS MMQ 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified lib function for NS MMQ 2-site, to have looping over spins and frequencies inside lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fixed the use of higher dimensional data in NS MMQ 2-site SQ DQ ZQ.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for documentation in NS MMQ 2-site/SQ/DQ/ZQ/MQ.  Now explains which dimension data should be in.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the reshaping of dw and dwH, since it is not dependent on experiment.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changed the calculation of inner product in model NS CPMG 2-site 3D.  The out argument of numpy.dot is buggy, and should not be used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added missing instances of cleaning the data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Bug fix for model LM63 3-site.  The index si has to be used to extract data to lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Temporary added system test: test_korzhnev_2005_all_data_disp_speed_bug.  This makes a minimisation with 1 iteration, and so will give the chi2 value at the preset parameter values.  This is chi2 value should give 162.5, but gives 74.7104.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Updated documentation on dimensionality of numpy array num_points.  They are in dimension [NE][NS][[NM][NO], where oi gives the number of dispersion points at that offset.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for system test: test_korzhnev_2005_all_data.  The masking for replacing values was wrong.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the cleaning of data points and replacing of values of out loop for model NS MMQ 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for structure cleaning and value replacing for model MMQ CR72.  System test: test_korzhnev_2005_all_data revealed how this should be done properly.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for system test test_korzhnev_2005_all_data_disp_speed_bug.  The precision is lowered, and now matches the original system test.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced index to numpy array from example [0][si][mi][oi] to [0, si, mi, oi].  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * More replacing of numpy index.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation fix, where a double bracket "[[" has been copied into all lib functions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * More fixes for numpy index in lib functions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Restructured target function for NS MMQ 3-site to the new API structure of higher dimensional data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Reordered the lib function for NS MMQ 3-site to use higher dimensional data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation fix for which dimensionality number of points have.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation fix for the initial data structure of cpmg_frqs, spin_lock_nu1, r1.  They were incorrect.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * First attempt to implement target function for NS R1rho 2-site.  But it does not work yet.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * First attempt to implement lib function for NS R1rho 2-site.  But it does not work yet.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fatal fix for calling inv_relax_time from relax_time variable.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removal of the temporary offset argument.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation fix for the dimensionality of the input arrays.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the target function for NS R1rho 3-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the lib function for NS R1rho 3-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented target function for LM63 3-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the lib function for LM63 3-site, for higher dimensional data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the number of disp points in target function for LM63 3-site, since it is no longer used, but have been replaced with mask replacements.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented class function in target class, to return back_calc values as list of lists.  This is the back and forth conversion between the data structures implemented when gathering the data, and the data send to the library function of higher dimensionality.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Used the new class function: get_back_calc(), to get the data in the right structures when interpolating for graphs.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed superfluous check, after the returned data is now in right structure.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made changes to the dir argument of system test Relax_disp.test_r1rho_kjaergaard.  This is to prepare for: sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff and sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].  This is also to test an expected bug, if R1 is not loaded.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * The relaxation dispersion target function can now be set up when the optional frqs_H argument is None.  This allows the profiling scripts to run.
        * More stability fixes for the relaxation dispersion target function initialisation.  The target function can now be initialised when the r1 and chemical_shift arguments are None.
        * Split the system test test_r1rho_kjaergaard into a setup function, and a test function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Renamed system test test_r1rho_kjaergaard to test_r1rho_kjaergaard_auto.  This corresponds to the use of the automatic analysis method.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Split system test test_r1rho_kjaergaard into test_r1rho_kjaergaard_auto and test_r1rho_kjaergaard_man.  This is to test use of the manual way to analyse.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified all of Troels' dispersion profiling scripts to work with older relax versions.  This is in preparation for obtaining some powerful timing statistics.  The calls to the r2eff_*() functions are unnecessary and are the only failure point in the scripts between the current code in the disp_spin_speed branch and trunk or older versions of relax.  So these function calls have been eliminated.
        * Implemented system test test_r1rho_kjaergaard_missing_r1, for safety check if R1 data is not loaded.  The system test passes, so target function is safe.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Python 3 support for the dispersion profiling scripts.  The xrange() builtin function does not exist in Python 3, so this is now aliased to range() which is the same thing.
        * Replaced double or triple hash-tags "##" with single hash-tags "#".  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copyright fixes for all the models, where Troels E. Linnet have made changes to make them functional for higher dimensional data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copyright fix for model TSMFK01.  Sebastien Morin did not take part of implementing the TSMFK01 model.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Created a super script for profiling the relaxation dispersion models.  This script will execute all of the current profiling scripts in the directory test_suite/shared_data/dispersion/profiling for both the current version of relax and any other specified version (current set to the 3.2.2 relax tag).  It will run the scripts and relax versions interleaved N=10 times and extract the func_*() target function call profile timings.  This interleaving makes the numbers much more consistent.  Averages and standard deviations are then calculated, as well as the speed up between the two relax versions.  The results are printed out in a format suitable for the relax release messages.
        * Increased the number of iterations to 1000 in all of the profiling scripts.  This is for better statistics in the disp_profile_all.py script, and makes the number consistent between the different models.
        * Added a log file for comparing the speed of the disp_speed_branch to relax 3.2.2.  This is from the disp_profile_all.py statistics generating script.
        * Made the processor.return_object get the back_calc structure in the expected order.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fixed the ordering of the relax versions in the dispersion super profiling script disp_profile_all.py.  This has also been fixed in the disp_spin_speed branch to relax 3.2.2 comparison log.
        * Added a log file for comparing the speed of the disp_speed_branch to relax 3.2.1.  This is from the disp_profile_all.py statistics generating script.
        * Added a profiling script for the 'NS CPMG 2-site expanded' dispersion model.  This is the model at http://wiki.nmr-relax.com/NS_CPMG_2-site_expanded.  The script was copied from that of the CR72 model, and it only needed to be changed in a few places.  This is the first numeric model profiling script.
        * Updated the profiling super script and log for the 'NS CPMG 2-site expanded' model.  This is the model at http://wiki.nmr-relax.com/NS_CPMG_2-site_expanded.  This shows that the single spin calculation is 1.8 times faster, and the cluster of 100 11.7 times faster, when compared to relax 3.2.2.
        * Modified all of the dispersion model profiling scripts.  The single() function for timing the single spin target function speed has been modified to include a second outer loop over 100 'spins'.  This means that the timing numbers are equivalent to the cluster timings, as both are then over 100 spins.  This now allows not only relax version differences and model differences to be compared, but also the non-clustered and clustered analysis speeds.
        * Added a script for profiling the 'NS CPMG 2-site 3D' relaxation dispersion model.  This is the model at http://wiki.nmr-relax.com/NS_CPMG_2-site_3D.  Again this only involved copying one of the other scripts and modifying a few variable and function names.
        * Added the 'NS CPMG 2-site 3D' model to the dispersion super profiling script.  To handle the fact that this script has nr_iter set to 100 rather than 1000 (as otherwise it is too slow), a list of scaling factors has been created to scale all timing numbers to equivalent values.
        * Added DPL94 profiling script.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script for TSMFK01, to use correct parameters k_AB and r20a.  Or else, the lib functions is just calculating with zero?  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changes to profiling script of NS CPMG 2-site expanded.  The model does not have r20a and r20b, but only r2.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made changes to the profiling script of NS CPMG 2-site 3D.  Need to use the full model, when r2a and r2b is specified.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changes to profiling script of NS CPMG 2-site expanded.  The unpacking can be removed.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for the profiling script of NS CPMG 2-site 3D.  The model should also be specified to full.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * The disp_profile_all.py super script now prints out the current relax version information.  This is so that the log files contain information about the repository revision and path.
        * Copied profiling script of DPL94 to NS R1rho 2-site.
        * Improved the final printout from the disp_profile_all.py dispersion model super profiling script.
        * Added profiling script for NS R1rho 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * The disp_profile_all.py dispersion model super profiling script is now executable.
        * Decreased all nr_iter values by 10 and added more dispersion models to the super profiling script.  This is for the dispersion model profiling scripts in test_suite/shared_data/dispersion/profiling/, all controlled by the disp_profile_all.py super profiling script for generating statistics using all of the other profiling scripts.  The number of iterations needed to be decreased as otherwise it would now take almost 1 day to generate the statistics table.
        * Moved the parter conversion in LM63 3-site into the lib function.  This cleans up the target api function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script for DPL94 to TAP03.
        * Copied profiling script for DPL94 to TP02.
        * Copied profiling script for DPL94 to MP05.
        * Copied profiling script for DPL94 to M61.
        * Modified profiling script for TAP03 to be used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script for TP02, to be used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script for MP05.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script for M61.  This is the last one.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Expansion of the disp_profile_all.py dispersion model super profiling scripts.  The newly added profiling scripts for models 'M61', 'TP02', 'TAP03', and 'MP05' are now included in the super script to generate statistics for all of these as well.  The nr_iter variable has also been changed to match the other analytic models, so that the standard deviations are lowered and the statistics are better.
        * Moved the parameter conversion of MMQ CR72 into lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the parameter conversions of k_AB, k_BA and pB into lib function of NS MMQ 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the parameter conversion from target function to lib function for NS R1rho 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Updated the dispersion model speed statistics for the disp_spin_speed branch vs. relax-3.2.2.  This now includes the 'NS CPMG 2-site 3D', 'DPL94', and 'NS R1rho 2-site' dispersion models.  The timings for the single spin analyses are now comparable to the clustered analysis, as the equivalent of 100 single spins is being used.  The final printout is also in a better format to present for the relax release messages.  These new results show the insane 160x speed up of the 'DPL94' model.
        * Alignment improvements for the final printout from the dispersion model super profiling script.  The log file has been updated with what the new formatting will look like.
        * Updated the model names in the dispersion model super profiling script.  The 'CR72', 'B14' and 'NS CPMG 2-site 3D' models are the full, slower versions rather than the faster models with R20 = R20A = R20B.  The log file has been updated to match.
        * Moved the parameter conversion for NS MMQ 3-site into lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Updated the dispersion model profiling comparison of the disp_spin_speed branch vs. relax-3.2.2.  The 'M61', 'TP02', 'TAP03', and 'MP05' models are now included.  The final printout has been manually updated to reflect the newest version of the disp_profile_all.py super profiling script.
        * Moved the parameter conversion for NS R1rho 3-site into lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script for CR72, so there is now a normal and a full version.
        * Copied profiling for B14 to normal and full model.
        * Created a text file suitable for use as part of the relax release notes.  This contains the statistically averaged profiling information of the speed of the dispersion models in the disp_spin_speed branch vs. relax-3.2.2.  This file has been created so that it can be used as part of the release notes for the version of relax that contains the insane speed ups of this branch.  This file will be updated as new models are profiled and if any more speed ups magically appear.
        * Copied profiling script for NS CPMG 2-site 3D.
        * Copied profiling script for NS CPMG 2-site star.
        * Copied profiling script for No Rex.
        * Modified profiling script for B14, to R20A=R20B.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented profiling script for NS CPMG 2-site 3D.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented profiling script for NS CPMG 2-site star and star full.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script to be used for LM63.
        * Copied profiling script to model IT99.
        * Added profiling script for IT99.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented profiling script for LM63.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the "eta_scale = 2.0**(-3.0/2.0)" out of lib function for MMQ CR72, since this is only needs to be computed once.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for spaces around "=" outside functions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Critical fix for wrong space inserted in NS MMQ 3-site MQ.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fixed the input for unit test of MMQ CR72.  The number of input parameters has been lowered.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added additional math domain checking in B14.  This is when v1c is less than 1.0.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Comment fixing, for explaining the masking and replacing when dw is zero.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script to be used for profiling the use of higher dimensional data for the numpy eig function.
        * Implemented the collection of the 3D exchange matrix, for rank [NE][NS][NM][NO][ND][7][7].  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented test, to see if 3D exchange matrices are the same.  This can be tested while running system test test_hansen_cpmg_data_to_ns_cpmg_2site_3D.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Shifted the computation of Rexpo two loops up.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added intermediate step with for loops.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added another intermediate step.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added function to compute the matrix exponential for higher dimensional data of shape [NE][NS][NM][NO][ND][7][7].  This is done by using numpy.einsum, to make the dot product of the last two axis.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Inserted intermediate step, to check if the matrix propagator to evolve the magnetization is equal when done for lower dimensional data of shape [7][7] and higher dimensional data of shape [NE][NS][NM][NO][ND][7][7].  A short example is shown at the wiki: http://wiki.nmr-relax.com/Numpy_linalg#Ellipsis_broadcasting_in_numpy.einsum.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented double speed of model NS CPMG 2-site 3D.  This is done by moving the costly calculation of the matrix exponential out of the for loops.  The trick was to find a method to do dot product of higher dimensions.  This was done with numpy.einsum, example at: http://wiki.nmr-relax.com/Numpy_linalg#Ellipsis_broadcasting_in_numpy.einsum.  Example: dot_V_W = einsum('...ij,...jk', V, W_exp_diag) where V, and W_exp_diag has shape [NE][NS][NM][NO][ND][7][7].  The profiling script shows a 2X speed up.
        * Made notation consistent for variables, using "_i" to clarify extracted data from matrix.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the calculation the evolution matrix out of for loops.  The trick is that numpy.einsum allows for dot product of higher dimension:  The essential evolution matrix; This is a dot product of the outer [7][7] matrix of the Rexpo_mat and r180x_mat matrices, which have the shape [NE][NS][NM][NO][ND][7][7]; This can be achieved by using numpy einsum, and where ellipsis notation will use the last axis.
        * Implemented system test: test_cpmg_synthetic_b14_to_ns3d_cluster.  This is to catch failures of the model, when data is clustered.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed unused variables in NS CPMG 2-site 3D, to clean up the code.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added the NS matrices, rr1rho_3d_rankN, to collect the multi dimensional 3D exchange matrix, of rank [NE][NS][NM][NO][ND][6][6].  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added a check in lib/dispersion/ns_r1hro_2site.py, to see if the newly created multidimensional ns matrix of rank NE][NS][NM][NO][ND][6][6], is equal to the previous [6][6] matrix.  It is.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added the relax_time to collection of rr1rho_3d_rankN matrix collection.  This is to pre-multiply all elements with the time.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added a check, that the pre- relax_time multiplied multidimensional array, equal the previous.  It does, to the sum of 1.0e-13.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the function use the new multidimensional R_mat matrix.  System test: test_tp02_data_to_ns_r1rho_2site still passes.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix to the matrix_exponential_rankN, to return the exact exponential for any higher dimensional square matrix of shape [NE][NS][NM][NO][ND][X][X].  The fix was to the eye(X), to make the shape the same as the input shape.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the costly calculation of the matrix exponential out of for loops.  It was the numpy.eig and numpy.inv which was draining power.  This speeds up model NS R1rho 2-site, by a factor 4X.
        * Made the returned multidimensional rr1rho_3d_rankN, be of float64 type.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Cleaned up the code of NS R1rho 2-site, and removed the matrix argument to the function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the parsing of a matrix to the lib function of NS R1rho 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added the function "rcpmg_star_rankN" for the collection of the multidimensional relaxation matrix for model NS CPMG 2-site star.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Insert check, that the newly created multidimensional matrix is the same.  They are, but only to the fifth digit.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Started using the newly created multidimensional matrix.  test_hansen_cpmg_data_to_ns_cpmg_2site_star.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added the system test: test_cpmg_synthetic_b14_to_ns_star_cluster, to check for the model is still working after change.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Started using the newly cR2 variable, extracted from higher dimensional data.  This should be okay, but system test test_hansen_cpmg_data_to_ns_cpmg_2site_star, now fails.
        * Changes of values to system test test_hansen_cpmg_data_to_ns_cpmg_2site_star.  The values are changed, since chi2 is lower than before.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the costly finding of matrix exponential out of for loops for eR_tcp.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Rearranged the code, to properly show the nested matrix exponentials in dot functions.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the costly matrix_exponential of cR2 out of for loops.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Rearranged the dot code, for better view.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Cleaned up the code in model NS CPMG 2-site star.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Simplified model NS CPMG 2-site 3D.  The expansion of matrices to higher dimensionality is not necessary.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Further cleaned up the code in NS CPMG 2-site star.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed input of matrix, Rr, Rex, RCS and R to model NS CPMG 2-site star.  These matrices is now extracted from NS matrix function rcpmg_star_rankN.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the collection of the multidimensional matrix m1 and m2 in model NS MMQ 2-site.  Inserted also a check, that the newly computed matrix is equal.  They are, to the 6 digit.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Started using the newly created multidimensional m1 and m2 matrices.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the costly calculation of matrix_exponential of M1 and M2 out of for loop, in model ns_mmq_2site_mq.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the function matrix_exponential_rankN also find the exponential if the experiments indices are missing.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for an extra axis inserted in eye function, when dimensionality is only [NS][NM][NO][ND].  This also fixes the index in the lib function of ns_mmq_2site_mq.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented same functionality in mmq_2site_sq_dq_zq.  Problem, following system test fails: test_korzhnev_2005_15n_dq_data, test_korzhnev_2005_15n_mq_data, test_korzhnev_2005_15n_sq_data, test_korzhnev_2005_1h_mq_data, test_korzhnev_2005_1h_sq_data, test_korzhnev_2005_all_data, test_korzhnev_2005_all_data_disp_speed_bug.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed grid search, and lowered number of iterations for system test: test_cpmg_synthetic_b14_to_ns3d_cluster, test_cpmg_synthetic_b14_to_ns_star_cluster.  This is to speed them up, since they before took 30 seconds.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for ns_mmq_2site_mq.  Variable was wrong called.  There seems to be a serious problem more with MQ.
        * Reinserted old code.  This fixes: test_korzhnev_2005_15n_mq_data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Forcing the dtype to be complex64, instead of complex128.  This solves a range of system tests.  The one who fails now is: test_korzhnev_2005_15n_zq_data, test_korzhnev_2005_1h_mq_data, test_korzhnev_2005_1h_sq_data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Forces complex64 in ns_mmq_2site_sq_dq_zq instead complex128.  This fixes system tests: test_korzhnev_2005_15n_zq_data,test_korzhnev_2005_1h_sq_data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Force complex64 in ns_mmq_2site_mq.  This solves all system tests.  Forcing to be complex64, does not seems like a long standing solution, since complex128 is possible.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for using the old matrix_exponential of m1.  One: test_korzhnev_2005_15n_sq_data is still failing.  That still uses the matrix_exponential_rankN.  There seems to be a problem with matrix_exponential_rankN, when doing complex numbers.  Maybe the dtype has to get fixed?  Use it as a input argument?  It must be the einsum.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added the "dtype" argument to function matrix_exponential_rankN.  This is to force the conversion of dtype, if they are of other type.  This can be conversion from complex128 to complex64.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix the bug: "M2_i = M1_mat", which was causing the problems getting system tests to pass.  Removed the specifications of which dtype, the initial matrices are created.  They can be converted later, with the specification of dtype to matrix_exponential_rankN().  All system tests now pass.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the Bloch-McConnell matrix for 2-site exchange into lib/dispersion/ns_matrices.py.  This is for consistency with the other code.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the matrices for Bloch-McConnell from lib ns_mmq_2site, since they are now defined in ns_matrices.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the Bloch-McConnell matrix for 3-site exchange, into the lib/dispersion/ns_matrices.py.  This is to standardize the code.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed m1 and m2 to be sent to lib function of NS MMQ 2-site, since they are now populated inside the lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented the Bloch-McConnell matrix for 3-site exchange, for multidimensional data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Inserted a check, that the new higher dimensional m1 and m2 matrices are equal to before.  They are, to the 5 digit.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Started using the newly created higher dimensional Bloch-McConnell matrix for 3-site exchange.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the calculation of the matrix exponential out of for loops for NS MMQ 3-site MQ.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Converted NS MMQ 3-site/SQ/DQ/ZQ to calculate the matrix exponential out of the for loops.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the complex64 to be used as dtype in matrix exponential.  Fix for missing "_i" in variable.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed m1 and m2 to be sent to target function of ns_mmq_3site_chi2.  They are now populated inside the lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation and input fix for NS MMQ 2-site.  The m1 and m2 matrices are populated inside the lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Renamed some numerical matrices, to get consistency in naming.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented multidimensional NS R1rho 3-site exchange matrix.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Inserted check, that newly multi dimensional matrix is equal the old.  It is, to the 13 digit.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Started using the newly multidimensional 3D exchange matrix.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved the calculation of the matrix exponential out of the for loops for NS R1rho 3-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed the parameter "matrix" to be send to lib function of NS R1rho 3-site, since it is now populated inside the lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved parameter conversion for NS R1rho 3-site inside lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Cleaned up the Dispersion class target function, for creation of matrices, which is now populated inside the lib functions instead.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed pA and pB from the matrix population function rcpmg_star_rankN, since they are not used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed pA and pB from the matrix population function rr1rho_3d_2site_rankN, since they are not used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation fix for the dimensionality for model NS R1rho 2-site.  The data is lined up to be of form [NE][NS][NM][NO][ND].  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed pA, pB and pC from the matrix population function rr1rho_3d_3site_rankN, since they are not used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Deleted the profiling of eig function profiling script.  This was never implemented.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * For all profiling scripts, added conversion to numpy array for CPMG frqs and spin_lock, since some models complained in 3.2.2, that they were of list types.  Also fixed IT99 to only have 1 spin, since clustering is broken in 3.2.2.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified super profiling script, to allow input to script, where alternative version of relax is positioned.  Collected the variables in a list of lists, for better overview.  Added a print out comment to IT99, to remember the bug.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added comment field to super profiling script.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Math domain fix for NS CPMG 2-site expanded.  This is when t108 or t112 is zero, in the multidimensional array, a division error occurs.  The elements are first set to 1.0, to allow for computation.  Then elements are later replaced with 1e100.  Lastly, if the elements are not part of the "True" dispersion point structure, they are cleaned out.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Precision lowering of system test, test_korzhnev_2005_15n_sq_data and test_korzhnev_2005_1h_sq_data.  The system tests does not fail on Linux 64-bit system, but only on Mac 32-bit system.  This is due to floating error deviations.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added log files for super profiling against tags 3.2.1 and 3.2.2.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied lib.linear_algebra.matrix_exponential to lib.dispersion.matrix_exponential.  The matrix exponential of higher dimensional data is only used in the dispersion part of relax.
        * Added to __init__, the new lib.dispersion.matrix_exponential module.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added to unit_tests/_lib/_dispersion/__init__.py, the new unit test file: test_matrix_exponential.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added numpy array save files.  They are the numpy array structures, which are send in from system test: Relax_disp.test_hansen_cpmg_data_to_ns_cpmg_2site_3D.  These numpy array structures, are used in unit tests.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added unit test unit_tests/_lib/_dispersion/test_matrix_exponential.py to test the matrix exponential from higher dimensional data.  lib.dispersion.matrix_exponential.matrix_exponential_rankN will match against lib.linear_algebra.matrix_exponential.  Data which is used for comparison, comes from system test: Relax_disp.test_hansen_cpmg_data_to_ns_cpmg_2site_3D.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Renamed function to return data in unit test _lib/_dispersion/test_matrix_exponential.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix to lib/dispersion/matrix_exponential.py, since the svn copy command was used on non-updated version of the file.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added unit test for doing the matrix exponential for complex data.  This test shows, that the dtype=complex64, should be removed from lib/dispersion/ns_mmq_2site.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added data for unit test for the testing of the matrix_exponential_rankN.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Expanded the dispersion profiling master script to handle any two relax versions.  To compare two relax versions, for example 3.2.2 to 3.2.1, either the path1 and path2 variables or two command line arguments can be supplied.  The first path should be for the newest version.  This will allow for comparing the speed differences between multiple relax versions in the future.
        * Split matrix_exponential_rankN into matrix_exponential_rank_NE_NS_NM_NO_ND_x_x and matrix_exponential_rank_NS_NM_NO_ND_x_x.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Moved numerical solution matrices into the corresponding lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling scripts, to be used for 3-site models and MMQ models.
        * Implemented profiling script for LM63 3-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Improved the relax version printouts for the dispersion model master profiling script.  This now reports both relax versions.
        * Removed a tonne of unused imports from the dispersion model profiling scripts.  This is to allow most of the scripts to run on the relax 3.1.x versions, as well as to clean up the scripts.  The unused imports were found using the command:  pylint test_suite/shared_data/dispersion/profiling/*.py --disable=all --enable=unused-import.
        * Added a relaxation dispersion model profiling log file for relax version 3.2.1 vs. 3.2.0.  This is the output from the dispersion model profiling master script.  It shows a 2.2 times increase in speed for the B14 and B14 full models, with all other models remaining at the same speed.  This matches the changes for relax 3.2.1 (https://gna.org/forum/forum.php?forum_id=2462), the main feature of which is a major bugfix for the B14 models.
        * The 'relax -v' command is now used for the dispersion model profiling script initial printout.  This is to show the two different relax versions being compared.
        * Modifications to the dispersion model profiling master script.  The info.print_sys_info() function of the current relax version is being called at the start to show all information about the current system.  This is useful to know the speed of the machine, the OS, the Python version and numpy version.  The numpy version is important as future versions might optimise certain functions that are currently very slow, hence that could be a cause of model speed differences.  In addition, the path variables path1 and path2 have been renamed to path_new and path_old to make it clearer which is which.  And the individual profiling scripts are no longer copied to the base directory of the relax versions being compared, and are run in place.
        * Added a relaxation dispersion model profiling log file for relax version 3.2.2 vs. 3.2.1.  This is the output from the dispersion model profiling master script.  It shows that the relax 3.2.2 release did not in fact feature "a large speed up of all analytic relaxation dispersion models" as described in the release notes at https://gna.org/forum/forum.php?forum_id=2465.  For the CPMG models there is a 1 to 2 times increase in speed.  But for the R1rho models, there is a 1 to 2 times decrease in speed.
        * Added a relaxation dispersion model profiling log file for relax version 3.2.0 vs. 3.1.7.  This is the output from the dispersion model profiling master script.  It shows that there are no speed differences.
        * Added a relaxation dispersion model profiling log file for relax version 3.1.7 vs. 3.1.6.  This is the output from the dispersion model profiling master script.  It shows that there are no speed differences.
        * Modified profiling script for NS R1rho 3-site, to be functional.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Modified profiling script for NS R1rho 3-site linear to be functional.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added a relaxation dispersion model profiling log file for relax version 3.1.3 vs. 3.1.2 vs. 3.1.1.  This is the output from the dispersion model profiling master script.  It shows that there are no major speed differences between these relax versions.
        * Added the system information printout to the dispersion model profiling master script output.  This is for the log files comparing one version of relax to the previous version.
        * Added profiling script for model MMQ CR72,  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Fix for the replacement value for invalid values in model MMQ CR72.  The value was set to use r20, but should instead be 1e100.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Copied profiling script from MMQ CR72, to NS MMQ 2-site and 3-site.
        * Copied profiling script to NS MMQ 3-site linear.
        * Implemented profiling script for NS MMQ 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented profiling script for NS MMQ 3-site and 3-site linear.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Speeded up model NS CPMG 2-site star, by moving the forming of the propagator matrix out of the for loops, and preform it.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added a relaxation dispersion model profiling log file for relax version 3.1.4 vs. 3.1.3.  This is the output from the dispersion model profiling master script.  It shows that there are no speed differences.
        * Speeded up NS MMQ 2-site, by moving the forming of evolution matrix out of the for loops, and preform it.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Speeded up NS MMQ 3-site, by moving the forming of evolution matrix out of the for loops, and preform it.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added a relaxation dispersion model profiling log file for relax version 3.1.5 vs. 3.1.4.  This is the output from the dispersion model profiling master script.  It shows that there are no speed differences.
        * Speeded up NS R1rho 2-site, by preforming the evolution matrices, and the M0 matrix in the init part of the target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Speeded up NS R1rho 3-site, by preforming the evolution matrices, and the M0 matrix in the init part of the target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Expanded the dispersion model profiling master script to cover all the new profiling scripts.  This includes all 3-site and MMQ models.  The list is now complete and covers all models.  The only model not included in 'M61 skew' which has redundant parameters and is not optimisable anyway.
        * Added a relaxation dispersion model profiling log file for relax version 3.1.6 vs. 3.1.5.  This is the output from the dispersion model profiling master script.  It shows that there are almost no speed differences, except for a slight decrease in speed in the 'CR72 full' model for single spins.
        * Split system test test_tp02_data_to_ns_r1rho_2site into a setup and test part.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Implemented a clustered version of system test test_tp02_data_to_ns_r1rho_2site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Inserted an extremely interesting development in NS R1rho 2-site.  If one do a transpose of M0, one can calculate all the matrix evolutions in the start via numpy einsum.  Since M0 is in higher a dimensions, one should not do a numpy transpose, but swap/roll the outer M0 6x1 axis.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Shortened the code dramatically for NS R1rho 2-site.  It is possible to calculate all in "one" go, after having the transposed/rolled-back M0 magnetization.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Speeded up the code of NS R1rho 2-site.  This was essential done to numpy einsum, and doing the dot operations in multiple dimensions.  It was though necessary to realize, that to do the proper dot product operations, the outer two axis if M0 should be swapped, by rolling the outer axis one back.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Speeded up the code of NS R1rho 3-site.  This was essential done to numpy einsum, and doing the dot operations in multiple dimensions.  It was though necessary to realize, that to do the proper dot product operations, the outer two axis if M0 should be swapped, by rolling the outer axis one back.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * For model NS CPMG 2-site 3D, the M0 matrix was preformed for higher dimensionality in init of target function.  The transposes/rolled axis versions was also initiated.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Swapped the dot product position, when propagating the magnetisation in model NS CPMG 2-site 3D.  This it to try to align to same method as in NS R1rho 2-site.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Lowered the looping in NS CPMG 2-site 3D, by preforming the initial dot product.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Speeded up NS CPMG 2-site 3D, by preforming the magnetisation.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Got rid of the inner evolution of the magnetization.  If the looping over the number of CPMG elements is given by the index l, and the initial magnetization has been formed, then the number of times for propagation of magnetization is l = power_si_mi_di-1.  If the magnetization matrix "Mint" has the index Mint_(i,k) and the evolution matrix has the index Evol_(k,j), i=1, k=7, j=7 then the dot product is given by: Sum_{k=1}^{k} Mint_(1,k) * Evol_(k,j) = D_(1, j).  The numpy einsum formula for this would be: einsum('ik,kj -> ij', Mint, Evol).  Following evolution will be: Sum_{k=1}^{k} D_(1, j) * Evol_(k,j) = Mint_(1,k) * Evol_(k,j) * Evol_(k,j).  We can then realize, that the evolution matrix can be raised to the power l.  Evol_P = Evol**l.  It will then be: einsum('ik,kj -> ij', Mint, Evol_P).  Get which power to raise the matrix to.  l = power_si_mi_di-1.  Raise the square evolution matrix to the power l.  evolution_matrix_T_pwer_i = matrix_power(evolution_matrix_T_i, l),  Mint_T_i = dot(Mint_T_i, evolution_matrix_T_pwer_i) or Mint_T_i = einsum('ik,kj -> ij', Mint_T_i, evolution_matrix_T_pwer_i).  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Tried to implement using lib.linear_algebra.matrix_power.square_matrix_power instead of matrix_power from numpy in NS CPMG 2-site 3D.  Strangely, then system test: test_hansen_cpmg_data_to_ns_cpmg_2site_3D_full starts to fail.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Changes to unit test of NS CPMG 2-site 3D.  This is after the new initiated M0 matrix in init of target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Double speed in NS CPMG 2-site star, after using numpy.linalg.matrix_power instead of the lib version in relax.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Triple speed in NS MMQ 2-site, after using numpy.linalg.matrix_power instead of the lib version in relax.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Small fix for making sure that power is a integer in NS MMQ 2-site.  Following system tests was failing:  Relax_disp.test_korzhnev_2005_15n_dq_data, Relax_disp.test_korzhnev_2005_15n_sq_data, Relax_disp.test_korzhnev_2005_15n_zq_data, Relax_disp.test_korzhnev_2005_1h_sq_data, Relax_disp.test_korzhnev_2005_all_data, Relax_disp.test_korzhnev_2005_all_data_disp_speed_bug.  They should already be integers, but is now solved.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Comment and spell fixing in NS CPMG 2-site 3D.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Triple speed in NS MMQ 3-site, after using numpy.linalg.matrix_power instead of the lib version in relax.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Updated the dispersion model profiling comparison of the disp_spin_speed branch vs. relax-3.2.2.  This now includes all dispersion models.  This shows the large speed increases in the numeric and MMQ models recently obtained.  Note that something went wrong with the 'NS CPMG 2-site 3D full' model for the clustered analysis, most times were around 24 seconds except for the first which was strangely 292 seconds.
        * Updated the relaxation dispersion model profiling log file for relax version 3.2.2 vs. 3.2.1.  This adds the MMQ and 3-site models to the log file.  The new information shows that there was a 4.2 times speed up for the 'MMQ CR72' model between these two relax versions, both for single spins and clustered spins, a much greater improvement than any other of the models.
        * Removed the now redundant disp_profile_all_3.2.2.table.txt dispersion model profiling table.  As the dispersion model profiling master script now covers all dispersion models, the output from this script produces this table exactly.  Therefore the end of the log files saved from running this script contains this table.
        * Initiated lengthy profiling script, that shows that doing square numpy matrix_power on strided data, can speed up the calculation by factor 1.5.  The profiling script can quickly be turned into a unit test, and includes small helper functions to calculate how to stride through the data.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * First try to implement function that will calculate the matrix exponential by striding through data.  Interestingly, it does not work.  These system tests will fail: test_hansen_cpmg_data_to_ns_cpmg_2site_3D, test_hansen_cpmg_data_to_ns_cpmg_2site_3D_full.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added matrix_power to the init file in lib/dispersion.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Deleted the printout in dep_check.  The printouts are only used for the essential packages before calling sys.exit().  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added the missing "self.num_exp" to target function.  Testing on older system, this was failing the system test.  It is a wonder how these lines in __init__ could be performed without this.
        * Fix for unit test passing on old numpy systems.  The error was: ValueError: setting an array element with a sequence.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Expanded the dispersion target function class documentation.  The NE, NS, NM, NO, and ND notation is now explained.
        * Added Ti and NT to the dispersion target function class documentation.
        * Slight speed up of the 'B14' and 'B14 full' dispersion models by minimising repetitive maths.
        * Initial try to write up a 2x2 matrix by closed form.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Made the validation check in profiling of matrix_power check all values.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced all self.spins with self.NS in target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced all self.num_exp with self.NE in target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Replaced all self.num_frq with self.NM in target function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * A very small speed up to the CR72 dispersion models by minimising repetitive maths operations.  The k_BA and k_AB rates are used to simplify the Psi calculation, dropping from 3 to 2 multiplications and removing a squaring operation.  The Dpos and Dneg value calculations have been simplified to drop one multiplication operation.  And the calculation of eta_scale / cpmg_frqs now only occurs once rather than twice.
        * Removal of a tonne of unused imports in the lib.dispersion package.  These were identified using the command "pylint * --disable=all --enable=unused-import".
        * A very small speed up to the MMQ CR72 dispersion model by minimising repetitive maths operations.  This matches the recent change for the CR72 model, though the Psi calculation was already using the fast form.
        * Created a master profiling script for comparing the speed between different dispersion models.  This is similar to the disp_profile_all.py script except it only operates on a single relax version.  The output is then simply the timings, with statistics, of the calculation time for 100 function calls for 100 spins (either 10,000 function calls for single spins or 100 function calls for the cluster of 100 spins).  The output of the script for the current disp_spin_speed branch code has also been added.
        * Critical fix for the recalculation of tau cpmg, when plotting for numerical models.  The interpolated dispersion points with tau_cpmg was calculated with frq, instead of cpmg_frq.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * The new dispersion model profiling master script now includes links to the relax wiki.  The models are no longer presented by name but rather by the relax wiki links for each model (see http://wiki.nmr-relax.com/Category:Relaxation_dispersion for all these links).  This is to improve the Google rank of the relax wiki, as these links may appear in a number of locations.
        * Removal of many unused imports in the disp_spin_speed branch.  These were detected using the devel_scripts/find_unused_imports.py script which uses pylint to find all unused imports.  The false positives also present in the trunk were ignored.
        * Code validation of lib/dispersion/b14.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/cr72.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/dpl94.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/lm63_3site.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/lm63.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/m61b.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/m61.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/matrix_exponential.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/mp05.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/ns_cpmg_2site_expanded.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/ns_cpmg_2site_star.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/ns_mmq_2site.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/ns_mmq_3site.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/ns_r1rho_2site.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/ns_r1rho_3site.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/tap03.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/tp02.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of lib/dispersion/two_point.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Code validation of target_functions/relax_disp.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * For model NS MMQ 3-site, moved the parameter conversion of dw_AB from target function to lib function.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed chi sum initialisation in func_ns_mmq_2site() as this is not used.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Documentation fix for the get_back_calc() function in target_function/relax_disp.py.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Removed unnecessary repetitive calculation of kex**2 in model DPL94.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * API documentation fixes, where a "\" is the last character on the line.  There should be a space " ", ending this character.  Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Updated the minfx version number to 1.0.9 in the release checklist document.  This as of yet unreleased version contains an important fix for parallelised grid searches when the number of increments is set to one (i.e. a preset parameter).
        * Fix for the _prompt.test_align_tensor.Test_align_tensor.test_init_argfail_params unit test.  As the alignment tensor can now be initialised as None, the None value can be accepted and a different RelaxError is raised when the params argument is incorrectly supplied.
        * Added a new set of icons for use with the minimisation user functions.  These are of the Rosenbrock function and are much better suited for small icons than the current OpenDX 3D isosurface plots.  The matplotlib figure originates from public domain code at http://commons.wikimedia.org/wiki/File:Rosenbrock_function.svg.
        * Redesign of the optimisation user functions calculate, grid_search, and minimise.  In preparation for expanding the number of optimisation user functions, these three current user functions have been shifted into the new minimise user function class.  The calculate user function is now accessed as minimise.calculate.  The grid search as minimise.grid_search.  And minimisation is via the minimise.execute user function.  The icon used for the new user function class is the Rosenbrock function or the banana optimisation problem.  As this is such a radical change, a huge number of changes in the relax source code, the sample scripts, the user manual, and the test suite were required.
        * Created the new minimise.grid_zoom user function.  This allows the grid zoom level to be set.  The value is stored in the current data pipe and will be used later by the minimise.grid_search user function.
        * The minimise.grid_zoom user function now uses the zoom-in Oxygen icon.
        * Created the Relax_fit.test_zooming_grid_search system test.  This will be used to test the implementation of the zooming grid search.  The relaxation curve-fitting analysis should be one of the fastest for testing this.
        * Added the print_model_title() method to the specific analysis base API class.  This will be used to format and print out the information returned by the model_info() API method.
        * Implemented the print_model_title() specific analysis API method for the dispersion analysis.
        * Modified the specific analysis API _model_loop_spin() common method.  This now additionally returns the spin ID string to allow the corresponding spin container to be identified.
        * Implemented the specific analysis API common method _print_model_title_spin().  This is for the corresponding _model_loop_spin() method.  It can be aliased in the specific analyses to provide the print_model_title() API method.
        * Aliased the _print_model_title_spin() specific analysis API common method in a few analyses.  This provides the print_model_title() API method for the J(w) mapping, consistency testing, and relaxation curve fitting analyses.
        * Updated all the specific analysis methods affected by the _model_info_spin() API method change.  This is for the change whereby the common API method now returns the spin ID string as well.
        * Implemented get_param_names() and get_param_values() for the relaxation curve-fitting analysis.  These are part of the specific analysis API.
        * Created the specific analysis API return_parameter_object() function.  This is used by the non-specific analysis code to obtain the parameter object (a singleton object).  It will allow for more direct access to the parameter information.
        * Created the parameter object infrastructure for adding the grid search lower and upper bounds.  The _add() method now accepts the grid_lower and grid_upper keyword arguments, which can be either values or functions.  These are then stored in the _grid_lower and _grid_upper class dictionaries.  The public methods grid_lower() and grid_upper() have been added to return the value corresponding to the given parameter.
        * Modified the specific analysis parameter object grid_lower() and grid_upper() methods.  These now accept the model information from the model_loop() API method and send that into an grid lower and upper functions.  These functions will require the information to pull out the correct spin, spin cluster, or other information from the current data pipe to determine what the bounds should be.
        * Implemented infrastructure in the grid_search user function in preparation for the zooming grid.  The grid search backend now calls the new grid_bounds() function.  This takes the lower and upper bounds as arguments, uses the specific API to determine the per-model parameter grid search bounds, and then returns a per model list of lower and upper bounds.  The specific API get_param_names() and get_param_values() are called to obtain the current model parameter names and values, and then the parameter names and model info are used in the new parameter object grid_lower() and grid_upper() methods to obtain the bounds.  This shifts all of the grid search bounds logic out of the specific analyses and into the grid search backend, so it should allow the specific analysis code to be simplified.
        * More modifications of the minimise.grid_search user function backend.  The grid_bounds() function has been renamed to grid_setup(), and it now accepts and processes the inc user function argument.  The error checking code of the relaxation curve-fitting grid_search_setup() optimisation function has been shifted into this analysis independent grid_setup() function to shift the minimise.grid_search user function error checking out of the specific analyses.  The function now scales the parameter bounds, using the yet-to-be implemented scaling() method of the parameter object.  And the grid search increments are converted into a per-model list of lists.
        * Created the parameter object infrastructure for registering parameter scalings.  The _add() method now accepts the scaling keyword argument, which can be either a value or function.  This is then stored in the _scaling dictionary.  The public method scaling() has been added to return the scaling factor corresponding to the given parameter.
        * Modified the analysis specific API optimisation method.  The base calculate(), grid_search() and minimise() methods now all accept the scaling_matrix argument, and the minimise() scaling argument has been removed.  This scaling_matrix argument should be a per-model list of scaling matrices.  To handle the change, the pipe_control.minimise.assemble_scaling_matrix() function has been created.  This uses the new parameter object scaling values to create the list of scaling matrices.  This will in the end replace all of the analysis specific assemble_scaling_matrix() functions and simplify their optimisation code paths.
        * Changed the order of operations in the minimisation user function backends.  The specific analysis API overfit_deselect() method needs to be called before any grid bounds, increments, or the scaling matrices are assembled.  This is for the cases when the grid bounds or scaling factors are functions rather than values.
        * Converted the relaxation curve-fitting analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the curve-fitting parameters.  This includes three functions i_scaling(), i0() and iinf() in the specific_analyses.relax_fit.parameter_object module for calculating some of these values.  The specific_analyses.relax_fit.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the specific_analyses.relax_fit.optimisation.grid_search_setup() function was redundant and was deleted.
        * Created the consistency testing specific API method get_param_names().  This is now required for the minimise.calculate user function, specifically for the analysis independent assemble_scaling_matrix() function.  The get_param_names() method simply returns the fixed list of parameter names.
        * Standardisation of the specific analysis API with respect to the model_loop() and base_data_loop().  The model information arguments for the data returned by model_loop(), and the data arguments for the data arguments for the data returned by base_data_loop() have been standardised throughout the API.
        * Epydoc parameter order rearrangement in the specific analysis API base class.
        * Updated the specific analysis API common methods for the recent model_info argument changes.
        * Updated all of the specific API calculate() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the minimise.calculate, minimise.grid_search and minimise.execute user functions and sent into the specific analysis backend.
        * Updated all of the specific API grid_search() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the minimise.calculate, minimise.grid_search and minimise.execute user functions and sent into the specific analysis backend.  The argument is also passed into the minimise() API method from the grid_search() method when that is used.
        * Updated all of the specific API minimise() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the minimise.calculate, minimise.grid_search and minimise.execute user functions and sent into the specific analysis backend.
        * Fix for the Monte Carlo simulations for the model_info argument changes in the specific API.
        * Fixes for the consistency testing and J(w) mapping calculate() methods.  This is for the changes to the data_init() specific analysis API method.
        * More fixes for the Monte Carlo simulations for the model_info argument changes in the specific API.
        * Updated all of the data_init() specific API calls where the spin ID is expected.
        * Fixes for the _data_init_spin() specific API common method.  The data returned from _base_data_loop_spin() is just the spin ID, the spin container is not included.
        * Updated the eliminate user function backend to work with the model_info argument changes in the specific API.
        * The new pipe_control.minimise module functions can now handle models with no parameters.  The new assemble_scaling_matrix() and grid_setup() functions will now handle models with no parameters, as this is required for the relaxation dispersion analysis.
        * More fixes for the eliminate user function backend.  This is for the model_info argument changes in the specific API.
        * Fixes for the grid search backend for a recent breakage and expansion of its capabilities.  The user supplied lower and upper bounds for the grid search were no longer being scaled via the scaling matrix.  In addition, the code has been refactored to be simpler and more flexible.  The user can now supply just the lower or just the upper bounds and the grid search will work.
        * The grid search setup function now prints out the grid search bounds to be used.  This is in the pipe_control.minimise.grid_setup() function, hence it is analysis independent.  This is useful feedback for the user to know what the grid search is doing.  And it will be even more useful for the zooming grid search to understand what is happening.
        * The grid search setup printout now also included the number of increments for each parameter.
        * Modified the new print_model_title() specific analysis API method.  This now accepts the prefix argument for creating different titles independently of the specific analysis.
        * The grid search setup function now uses the prefix argument to the print_model_title() API function.  This is simply set to 'Grid search setup:'.
        * The relaxation dispersion API now uses the MODEL_R2EFF variable for identifying the R2eff model.
        * Changes to the minimise.grid_search user function frontend.  The Boolean constraints argument has been shifted to the end, and empty lines have been removed.
        * Epydoc docstring fixes for the keyword arguments of the pipe_control.minimise module.
        * Shifted the constraints Boolean argument to the end of the grid_search() function argument list.
        * Major change to the grid search user function.  The minimise.grid_search user function now accepts the skip_preset flag.  When True, the grid search will skip any parameters with a preset value.  This allows the user to set parameters via the value.set user function and then have these parameters skipped in the grid search.  The new skip_preset argument is passed into the pipe_control.minimise.grid_setup() function in the backend.  This then sets both the grid lower and upper bounds to the preset parameter value and sets the number of increments to 1 for that parameter so that it is essentially skipped in the grid search.
        * Small change to the table printed out during the minimise.grid_search setup.
        * Fix for the skipping of preset parameters in the grid search.  Dictionary and list type parameters are now handled correctly.
        * Converted the relaxation dispersion analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the dispersion parameters.  This includes the functions dw_lower(), dwH_lower(), pA_lower() and i0_upper() in the specific_analyses.relax_disp.parameter_object module for calculating some of these values.  The specific_analyses.relax_disp.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the specific_analyses.relax_disp.optimisation.grid_search_setup() function was redundant and was deleted.  The specific_analyses.relax_disp.parameters.get_param_names() function was also modified with the full argument added, to allow either the base parameter names or an augmented form with the dictionary key for presenting to the user to be returned.  Importantly to allow the changes to be operational, the model_loop() API method was redesigned so that, for the R2eff base model, the individual spins rather than spin clusters will be looped over.  This allows the specific_analyses.relax_disp.optimisation.minimise_r2eff() function to continue to operate correctly.
        * Implemented the J(w) mapping analysis get_param_names() API method.  This simply returns the hardcoded list of 3 parameters of the model, and allows the minimise.calculate user function to operate.
        * Updated the _print_model_title_spin() specific API common method.  This now accepts the prefix argument and adds this to the title.
        * The minimise.grid_search user function can now properly handle preset values of NaN.  This occurs when the parameter vector contains values of None due to the parameter not being set and then the Python list being converted to a numpy array.  The value of NaN is now caught and the parameter is no longer identified as being preset.
        * Fixes for the relaxation curve-fitting grid search.  The parameters which are not set are no longer defaulting to 0.0.  This means that the parameter vector will sometimes contain NaN values, but this is important for the correct operation of the new minimise.grid_search user function backend.
        * Updated the NOE analysis to handle the changes for the minimise.calculate user function.  This now requires the model_loop() and get_param_names() API methods to be implemented.  The first is provided by the API common _model_loop_spin() method and the second simply returns a list of the single 'noe' parameter.
        * Created the _print_model_title_global() specific analysis API method.  This is to be paired with the _model_loop_single_global() API method and it simply prints out the prefix as the title.
        * Created the specific analysis parameter object _add_align_tensor() method.  When called by a specific analysis, this will add the [Axx, Ayy, Axy, Axz, Ayz] parameters to the corresponding parameter object.
        * Deleted the lib.optimisation module.  The checks in the single test_grid_ops() function are implemented in the pipe_control.minimise.grid_setup() function and are now redundant.
        * Removed the import of the now deleted lib.optimisation module from the model-free analysis.
        * Converted the N-state model analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the N-state model parameters.  The specific_analyses.n_state_model.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  In addition, all of the lower bounds defined in the grid_search() API method have been deleted as this is now in the parameter object.  The new API function print_model_title() has been aliased from _print_model_title_global().  And the get_param_names() and get_param_values() API methods have been implemented.
        * The grid search upper and lower bound functions now must accept the incs argument.  For a few analyses, the number of grid search increments are used to remove the end point of the grid, to remove duplicate points due to the circular nature of angles.  Therefore the parameter object grid_lower() and grid_upper() methods now send the grid increment number for each parameter into all grid bound determining functions.  The relaxation dispersion and curve-fitting analyses have been updated for the change.
        * Converted the frame order analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the dispersion parameters.  This includes the functions angle_upper_excluding_bound(), axis_alpha_upper(), cone_angle_lower(), cone_angle_upper(), pivot_grid_bound(), pivot_x_lower(), pivot_x_upper(), pivot_y_lower(), pivot_y_upper(), pivot_z_lower(), and pivot_z_upper() in the specific_analyses.frame_order.parameter_object module for calculating some of these values.  The specific_analyses.frame_order.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the setup and error checking code in the grid_search() API method was redundant and was deleted.
        * Modified all calls to the parameter object _add() base class method.  These are now all spread across multiple lines, with each argument on a separate line.  This is for easier maintenance of the specific analysis parameters, as the code is now much cleaner and argument changes will only have diffs for that argument.  It is also visually easier to see all the settings for each parameter.
        * Fix for the grid search setup printout when parameters are preset.
        * Changes to the diffusion tensor initialisation in the model-free auto-analysis.  The values of the tensor are now initialised to None.  This is to allow for the new grid search preset flag which defaults to True, setting the values to None indicates that a grid search should be performed.
        * The diffusion_tensor.init user function can now set initial tensor parameter values of None.  This is to allow for the new grid search preset flag.  Therefore allowing the values to be None allows for a grid search to be performed by default.
        * Created two new model-free system tests.  These are Mf.test_m0_grid_with_grid_search and Mf.test_m0_grid_vs_m1_with_grid_search.  Their aim is to better test the grid search in a model-free analysis when parameters are preset.
        * Converted the model-free analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the model-free parameters.  This includes the functions rex_scaling() and rex_upper() in the specific_analyses.model_free.parameter_object module for calculating some of these values.  The base parameter object has also been updated as that is where the diffusion parameters are defined.  Here the da_lower() and da_upper() have been defined to handle the different Da value constraints.  The specific_analyses.model_free.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the grid_search_config(), grid_search_diff_bounds() and grid_search_spin_bounds() functions in the specific_analyses.model_free.optimisation module were redundant and were deleted.  The new API function print_model_title() has been implemented to handle the grid search setup printouts.
        * Modified the pipe_control.minimise.grid_setup() function for when no parameters are present.  For the current version of minfx to function correctly (1.0.8), the lower, upper and inc values should be set to [] rather than None.
        * Fix for the lib.arg_check.is_num_or_num_tuple().  When the can_be_none flag is set to True, the tuple of None values is now considered valid.  This enable the diffusion_tensor.init user function to accept the spheroid tensor values of (None, None, None, None), and the ellipsoid tensor values as a tuple of 6 None.
        * Fix for the _prompt.test_diffusion_tensor.Test_diffusion_tensor.test_init_argfail_params unit test.  As the diffusion tensor can now be initialised as None, the None value can be accepted and a different RelaxError is raised when the params argument is incorrectly supplied.
        * Modified the behaviour of the parameter object units() method.  If the unit is set to the default of None, this method will now return an empty string instead of None.
        * The rx parameter of the relaxation curve-fitting analysis now has 'rad.s^-1' units defined.
        * Implemented the zooming grid search.  If the zoom level is set to any value other than 0, then the grid width will be divided by 2**zoom_level and centred at the current parameter values.  If the new grid is outside of the bounds of the original grid, the entire grid will be translated so that it lies entirely within the original.
        * Modified the zooming grid search algorithm.  If the zoom level is negative, hence the grid will be larger than the original, the checks that the grid is within the original are no longer active.
        * Changed the minimise.grid_zoom user function.  The zoom level can now be any floating point number or integer, including negative values.  The user function docstring has been significantly expanded to explain the entire zooming grid search concept.
        * Alphabetical ordering of the minimisation user functions in the user_functions.minimisation module.
        * Large expansion of the minimise.grid_search user function documentation.  The previous documentation was essentially non-existent.
        * Expanded the minimise.grid_zoom user function documentation.  A few sentences about the limitations of the algorithm have been added.
        * Completed the Relax_fit.test_zooming_grid_search system test.  Now only a single spin is optimised.  The zooming levels increase in integer increments from 0 to 50 so that the final zoomed grid is insanely small (as the curve-fitting C modules are incredibly fast, this test is nevertheless relatively quick).  The final zooming grid search parameter values are checked to see if they are the same as those optimised in the Relax_fit.test_curve_fitting_height system test to demonstrate the success of the algorithm.
        * Modified the grid search upper bounds functions for the relaxation curve-fitting.  This is for both the exponential relaxation curve-fitting analysis and the same fitting in the dispersion analysis.  The intensity values are doubled and then rounded to the next order.  This ensures that I0 and Iinf will be within the grid bounds.  Hence the zooming grid search can be used for these curves.
        * Expanded the documentation for the minimise.calculate user function.  This now explains the dual operations of the user function.
        * Fixes for some relaxation dispersion system tests not converted to the new optimisation user functions.  Minimisation is now via the minimise.execute user function, which used to be the minimise user function.
        * Added a 128x128 pixel version of the zoom-in Oxygen icon.  This icon size is not available in the repository located at svn://anonsvn.kde.org/home/kde/trunk/kdesupport/oxygen-icons.  Therefore the scalable/actions/small/48x48/zoom-in.svgz file was copied and then exported into a 128x128 PNG, and finally converted to a Gzipped EPS file for the relax manual.
        * The frame order grid search bound functions can now handle increment values of None or 1.  These cases are now caught and the full lower or upper bound is now returned.
        * More even spacing for the frame order grid search.  This is for the parameters which exclude end points in the grid search, as these excluded points do not decrease the number of increments searched over.
        * Even more even spacing for the frame order grid search.  This is for the parameters which exclude end points in the grid search, as these excluded points do not decrease the number of increments searched over.  This fixes the algorithm for all of the bounds.
        * Improved the logic for skipping parameters in the grid search.  The logic is also fully explained in the user function documentation.
        * Removal of all unused imports.  These were identified using the devel_scripts/find_unused_imports.py script.
        * Reverted the deletion of the Relax_disp.test_hansen_cpmg_data_to_lm63_3site system test which occurred in relax 3.2.3.  See the thread at http://thread.gmane.org/gmane.science.nmr.relax.scm/21774/focus=6300 for the request that this deletion be reverted.  This is the only system test for the 'LM63 3-site' dispersion model using real data.  Having this test allows for better coverage of the code.
        * Updated the Relax_disp.test_hansen_cpmg_data_to_lm63_3site system test.  This is for the changes to the optimisation user functions.
        * Updated the checks in the Relax_disp.test_hansen_cpmg_data_to_lm63_3site system test.  The values were incorrect due to a bug in relax and a non-optimal minfx setting (https://gna.org/bugs/?22210 and https://gna.org/bugs/?22211).
        * Fix for a fatal bug for the prompt UI on MS Windows.  The improvements in the tab completion support for the prompt UI on Mac OS X systems was fatal for certain Python readline modules on MS Windows, as readline.__doc__ can be None.  This is now correctly handled.
        * Decreased the precision the Relax_disp.test_hansen_cpmg_data_to_lm63_3site system test.  This is to allow the test to pass on Mac OS X systems.
        * Unit test fix for Mac OS X.  This is for the test_ns_mmq_2site_korzhnev_2005_15n_dq_data_complex128 test of test_suite.unit_tests._lib._dispersion.test_matrix_exponential.Test_matrix_exponential.  The tests no longer check for exact values, but use the assertAlmostEqual() calls instead.
        * Deleted the ancient optimisation_testing.py development script, as this no longer works and is of no use.
        * Implemented the pipe_control.mol_res_spin.format_info_full() function.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.scm/22522/focus=6534.  This is a verbose representation of the spin information which can be used for presenting to the user.  Functions for shorter string versions will also be of great use, for example as described by Troels at http://thread.gmane.org/gmane.science.nmr.relax.scm/22522/focus=6535.
        * Created a unit test for the pipe_control.mol_res_spin.format_info_full() function.  This comprehensive test covers all input argument combinations.
        * Changed the behaviour of the pipe_control.structure.mass.pipe_centre_of_mass() function.  This function returns the CoM and optionally the mass of the structural data loaded into the current data pipe.  However it was matching the structural data to the molecule-residue-spin data structure and skipping spins that were deselected.  This illogical deselection part has been eliminated, as spins can be deselected for various analysis purposes and this should not change the CoM.  The deletion also significantly speeds up the function.
        * Added Andy Baldwin's 2013 R1rho relaxation dispersion model (BK13) to the manual.  The model has been added to the table of dispersion models and to the dispersion software comparison table of the dispersion chapter of the manual.  The citation has also been added to the bibliography.
        * The BK13 dispersion model is now properly added to the software comparison table.
        * Added the 'BK13' and 'BK13 full' dispersion models to the to do section of the manual.
        * Standardisation of the author names in the bibliography of the relax manual.
        * Added links for the BK13 model to https://gna.org/support/?3155 in the manual.
        * Expansion of the 'to do' section of the dispersion chapter of the manual.
        * Editing of the 'to do' section of the dispersion chapter of the manual.
        * Split out the interpolating in specific_analyses.relax_disp.data.plot_disp_curves() into separate function.  This is to prepare for a interpolating function for spin-lock offset rather than spin-lock field strength for R1rho models.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Split out the looping over frequency and offset into its own function, in function of specific_analysis.relax_disp.data.plot_disp_curves().  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Split out the writing of dispersion graph files in specific_analyses.relax_disp.data.plot_disp_curves().  This is to prepare for a stand-alone function to plot R1rho graphs, interpolating theta through spin-lock offset rather than spin-lock field strength.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for function calling and default values of None in sub-plotting functions.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Large extension of specific_analyses.relax_disp.data(), by adding several helper plotting functions.  This is to prepare for plotting R1rho/R2 as function of effective field in rotating frame: w_eff.  R_2 = R1rho / sin^2(theta) - R_1 / tan^2(theta) = (R1rho - R_1 * cos^2(theta) ) / sin^2(theta).  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Extended specific_analyses.relax_disp.optimisation.back_calc_r2eff() to handle interpolated spin-lock offset values.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Removed a wrong adding of empty offset dimension in the get_back_calc() function of target_functions.relax_disp().  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added the back calculated R2 as function of effective field in rotating frame: w_eff.  R1rho R_2 is defined as: R_2 = R1rho / sin^2(theta) - R_1 / tan^2(theta) = (R1rho - R_1 * cos^2(theta) ) / sin^2(theta).  This is described more at: http://wiki.nmr-relax.com/DPL94#Equation_-_re-writed_forms.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added an intermediate attempt to show the back calculated data in the graph for R1rho/R2 as function of the effective field in rotating frame: w_eff.  The graph is aiming for the representation of Figure 2 in Kjaergaard et al 2013. (http://dx.doi.org/10.1021/bi4001062).  The figure can be seen at https://gna.org/support/download.php?file_id=20208.  It becomes clear, that it is not necessary interpolate through the spin-lock offset, but it is sufficient to interpolate through the spin-lock field strengths.  The necessary step was the extraction of the effective field in rotating frame, w_eff.  In earlier attempt is shown at: http://wiki.nmr-relax.com/File:Matplotlib_52_N_R1_rho_R2eff_w_eff.png  This though show lines for 6 offset values.  The question is how to show the single line of interpolation.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added NMR library function to convert the given frequency from rad/s to ppm units.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Hard-coded restriction of R1rho extra plotting to model DPL94, TP02, TAP03, MP05, NS_R1RHO_2SITE.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for sending the correct data structures to target function, and fix for the spin index which is always zero in graph production.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Moved the file_name creation out of the interpolate function, to make it a general function for interpolating.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Made both interpolation functions of the spin-lock field strength and spin-lock offset return the offset data.  This is make it possible to switch between the interpolating functions, when plotting R1rho graphs.  This is necessary to produce the R2 as function of effective field in rotating frame w_eff, and to produce R1rho as function of theta, when ramping the spin-lock offset.  These graphs can be seen at: http://wiki.nmr-relax.com/Matplotlib_DPL94_R1rho_R2eff.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Changed interpolation function from offset to spin lock field strength, to plot R1rho/R2 as function of effective field.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Improved axis label for plotting R1rho/R2 as function of effective field w_eff.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added sub-title to the plot of R1rho/R2 as function of effective field.  This is to add information about how the effective field has been interpolated.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added functionality to plot R1rho/R2 as function of effective field w_eff, for the R2eff model.  Also renamed a function, to better reflect is functionality.  The hard-coding of which models to plot, has been removed.  If the exp-type is R1rho, then the plotting will commence.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added the spin specific residue name and spin_id to the title of the dispersion plots.  This is handy, since it is often of interest to have this information at hand, when looking through many graphs.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed and improved epydoc information for interpolating function for dispersion values.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed the interpolating function for offset, and improved the epydoc information.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Corrected the epydoc information for the return_offset_data() function in specific_analyses.relax_disp.data.  The function has been extended to return more data.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed function to represent the functionality of returning data in correct xmgrace form.  Also improved the epydoc information, for the return of values.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed the other function to represent the functionality of returning data in correct xmgrace form.  Also improved the epydoc information, for the return of values.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added function to calculate rotating frame parameters for lib/nmr.py.  This function is called several times in specific_analyses/relax_disp/data.py by plotting functions.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Replaced repeated calculation of rotating frame parameters to use function in lib/nmr.py.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Skip production of plotting R1rho/R2 as function of effective field w_eff, when spin.isotope is not present.  This can happen when it is 'exp_fit' model curve fitting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added functionality to function to accept how the first part of the filename is formed.  This is to prepare to reuse the same plotting function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed plotting sub function, to accept different file name arguments, and X-axis arguments.  This is to reuse the sub-plot function to plot against different X-axis.  Added plot of R1rho as function of theta, where interpolated against spin-lock field strength.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Prepared flag, to tell which data type to interpolate through.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Preparation to interpolate through the offset to plot R1rho as function of theta, interpolated through spin-lock offset.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added graph functionality, to plot R1rho as function of theta, when spin-lock offset is interpolated.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Ensured production of plotting R1rho/R2 as function of effective field w_eff, when spin.isotope is not present.  The offset in radians would be set to 0.0 instead.  This can happen when it is 'exp_fit' model curve fitting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added function to return spin info, and a function to return a spin string for graphs.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Replaced the spin info string in the title of graphs, with the new function method.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added keywords to be used to backend function of plot_disp_curves.  The keyword 'y_axis', determine which y data to be plotted on this axis.  The keyword 'x_axis', determine which x data to be plotted on this axis.  The keyword 'extend_hz' to determine how far to extend interpolated CPMG frequency or spin-lock field strenght.  The keyword 'extend_ppm' to determine how far to extend interpolated spin-lock offsets.  The keyword 'interpolate' to determine to interpolate dispersion points, or offset.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Made the plotting function uniform into accepting both CPMG and R1rho data.  Also made a function to return data, depending if it is data, back calculated, interpolated or residual.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed return grace data function, to a better shorter name.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed the other return grace data function, to a better shorter name.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Hardcoded xmgrace colour_order, and made function to return data label, and data plot settings, depending on data type.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed plotting function to represent the function of writing to file.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Removed unused plotting function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Streamlined plotting functions, to have similar input.  Reordered the output from return_offset_data(), interpolate_disp() and interpolate_offset(), to reflect the order of data type.  Made the input to return_grace_data_vs_disp(), return_grace_data_vs_offset the same().  Added the interpolate flag to return_grace_data_vs_disp() and return_grace_data_vs_offset(), to help return correct X-value.  Added the interpolate flag to return_x_y_point(), to help determine if "disp point" or "offset point" should be returned.  Added the "offset point" to return_x_y_point() function, to make it possible to plot against offset.  Cleaned up the return_grace_data_vs_offset() function, to use newly created return_x_y_labels() function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for output catching after reorder or return_offset_data() function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Removed unused return_grace_data() function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Made uniform function for returning x_axis and y_axis labels for xmgrace plotting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Renamed return functions, to reflect they are specific for xmgrace plotting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Extended relax_disp auto_analyses to plot special R1rho graphs.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Modified front-end user function relax_disp.plot_disp_curves to send new arguments to back-end function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added new Unicode symbols to be used by the GUI drop-down menu.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Modified back-end of plot_disp_curves() to reflect changes to the front-end function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Extended system test Relax_disp.test_r1rho_kjaergaard_auto(), to check that the expected graphs exist.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added model 'No Rex' to system test Relax_disp.test_r1rho_kjaergaard_auto(), to check all graphs are produced.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added function to return the initial part of the file name for grace plotting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Modified system test to use the new function to return initial part of file name for grace plotting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Started testing all possible combinations of graphs for R1rho analysis.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added more printout, to detect which graphs are not working.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added forgotten "interpolate" type to function which return X,Y point to xmgrace graphs.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for interpolation graph when plotting R1rho/R2 as function of offset (ppm).  Missed to extract the offset value from list.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Forcing overwrite of special R1rho graphs in auto analyses in relax_disp.  The other graphs are also auto forced.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added system test Relax_disp.test_r1rho_kjaergaard_auto_check_graphs, to check that the contents of all combinations of graphs are consistent.  The system test actual show that the error is changing per run-through.  This is a bug, which should be corrected.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added graphs to check against in system test test_r1rho_kjaergaard_auto_check_graphs.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Code validation of system test file for Relax_disp.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix to system test Relax_disp.test_r1rho_kjaergaard_auto_check_graphs by only comparing X,Y values, and skipping the error.  This is a hack until the error difference bug gets corrected.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added system test Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs() to check all possible combinations of dispersion plotting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for GUI text in MS Windows, since subscript 1 and Greek theta symbol is not working in this Unicode system.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for desc_short, in user function relax_disp.plot_disp_curves.  The text "The " is preformed in the formatting.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for system test, after moving graphs to check against.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Moved graph files up one level in system test.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for forgotten removal of counter.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added check function for relax_disp.  This function check if interpolating against offset for non-R1rho exp types, and will raise an Error.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added check function to plot_disp_curves, to check that CPMG exp types are not interpolated against offset, which is not implemented.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for forgotten "1" in lib text GUI.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Improved description in GUI text for user function relax_disp.plot_disp_curves().  The improved description now explains the new features.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Extended graph labelling, file naming and return of data for multiple CPMG graphs types.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added system test Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs to check all CPMG graph combinations of:  y_axis_types = [Y_AXIS_R2_EFF, Y_AXIS_R2_R1RHO];  x_axis_types = [X_AXIS_DISP, X_AXIS_THETA, X_AXIS_W_EFF];  interpolate_types = [INTERPOLATE_DISP].  This is a total of 6 graphs.  The graphs will in most cases be totally equal, since the theta angle is calculated to 90 degrees, and R1 is returned as 0.0, then R2=(R1rho - R1 cos^2(theta)) / sin^2(theta) = R1rho = R2eff for CPMG models.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Added graphs to check against for system test: Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Expanded ex. to example in help text for function.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Fix for unit test, where return_offset() function return has been expanded and reordered.  Sr #3124 (https://gna.org/support/?3124): Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Sr #3138 (https://gna.org/support/?3138): Interpolating theta through spin-lock offset [Omega], rather than spin-lock field strength [w1].
        * Created the Bruker.test_bug_22411_T1_read_fail system test.  This is to catch bug #22411 (https://gna.org/bugs/?22411) as reported by Olena Dobrovolska.
        * Fix for system test Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs where minimise has been extended with execute.
        * Changed graphs after new minimisation algorithm has been implemented.  The values are now slightly different.
        * Implemented first try to stride through data, when computing the eig() of higher dimensional data.  System test test_cpmg_synthetic_b14_to_ns3d_cluster survived this transformation.  The system test will go from about 11 seconds to 22 seconds.
        * Implemented second try to stride through data, when computing the eig() of higher dimensional data.  This of data of form: NS, NM, NO, ND, Row, Col.  System test test_sprangers_data_to_ns_mmq_2site survived this transformation.  The system test will go from about 2 seconds to 4 seconds.
        * Created function to create the helper index numpy array, to help figuring out the indices to store in the exchange data matrix.  This is for striding through data and store the data correct in the data matrix.  This is for a special situation where numpy version is < 1.8, and where the numpy.linalg.eig() function can only be performed on square matrices, and not on higher dimensional data.  For this situation, it is necessary to stride through the data.
        * Created the numpy array self.index target function which contains index to store the data.  This is for situations where numpy version is under 1.8.
        * Added function to get the data view via striding through a higher dimensional column numpy array.
        * Extracted the data view of the index indices numpy array in the target_function.
        * A profiling showed, that it was not faster to preform the index view.
        * Made new general stride helper function and matrix_exponential function.
        * Changed to the matrix_exponential function for NS R1rho 2site.
        * Removed all unused helper functions, and matrix exponential functions.  They are now condensed to the fewest possible functions.
        * Fix for eye matrix being formed incorrectly.
        * Replaced all matrix_exponential functions in numerical models to use the new general matrix_exponential function.
        * Added warning message to auto analysis in relax disp, if numpy is below 1.8 and using numerical model.  This will make the analysis 5-6 times slower.
        * Fixes for numpy version under 1.8, when striding through data.
        * Fix to unit tests, after changing the name of matrix_exponential function.
        * Added graphs and results for run with MC=2000, for system test Relax_disp.test_r1rho_kjaergaard_auto().  This is to be able to extend graph testing for interpolated R1rho graphs, and to add figures to the latex manual.
        * Added list of R1rho models, which use R1 in their equations.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.  Bug #21788 (https://gna.org/bugs/?21788): Only Warning is raised for missing loading R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Modified the warning and error messages being raised when calling return_r1_data().  Now warnings is raised if no R1 data is available.  An error is raised if the R1rho model is expected to have R1 data, and it is not available.  That makes system test Relax_disp.test_r1rho_kjaergaard_missing_r1() fail, which is the expected behaviour.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.  Bug #21788 (https://gna.org/bugs/?21788): Only Warning is raised for missing loading R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added the model "MODEL_DPL94_FIT_R1", to the full list of models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * In system test Relax_disp.test_r1rho_kjaergaard_missing_r1(), started using the new model MODEL_DPL94_FIT_R1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added "r1_fit" as a parameter object.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added functionality to return r1_fit parameter in loop_parameters() function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added model variable MODEL_DPL94_FIT_R1, to relax_disp target function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Split the target function of model DPL94 into a func_DPL94 and calc_DPL94.  This is to prepare for a target function func_DPL94_fit_r1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added initial target function for model DPL94_fit_r1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added list of R1rho models, which can fit R1 in their equations.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Modified return_r1_data() function, to return numpy array of "None", if model is in list of "MODEL_LIST_R1RHO_FIT_R1".  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Modified target function func_DPL94_fit_r1(), to unpack fitted parameters correct.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added linear linear_constraints for parameter "r1_fit".  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added warning message when using function return_r1_data(), and model is in list MODEL_LIST_R1RHO_FIT_R1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added model DPL94_FIT_R1 to the list of MODEL_LIST_R1RHO and MODEL_LIST_R1RHO_FULL.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Modified return_r1_data(), to be dependent on fitting model.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Made function return_r1_err_data() be dependent on model type.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Replaced instances of "['r2', 'r2a', 'r2b']" with variable PARAMS_R20.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented model list, which uses parameter of inverted relax delay times.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented model list, which uses parameter of R20B.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix in target function for relax_disp, where model IT99 does not belong to model list with several chemical shift correlated parameters.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added new variable, for models which has parameters with mixed dw, and has two variables.  For example with both dw and dwH or dw_AB and dw_BC or phi_ex_B and phi_ex_C.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added model  MODEL_NS_R1RHO_3SITE, MODEL_NS_R1RHO_3SITE_LINEAR, to list of models who has who dw parameters.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added new variable, for models which has parameters with mixed dw, and has four variables  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added to relax_disp auto_analyses, that R1_fit should be plotted and written out.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added 2 new models, MODEL_NOREX_R1RHO and MODEL_NOREX_R1RHO_FIT_R1.  The "NOREX" model is not covering R1rho models.  The target function for "NOREX" is calculated as: back_calc = R20  R20 is for R1hro models equivalent to R1rho prime (R1rho'), which for example in the model of DPL94 would mean: R1rho = R1rho'  But for the "NOREX" case, the return should be R1rho = R1 * cos^2(theta) + (R1rho' + 0) * sin^2(theta).  This affects all off-resonance model calculations.  These two target functions will be implemented.  Bug #22440 (https://gna.org/bugs/?22440): The "NOREX" model is not covering R1rho models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Made the model MODEL_NOREX_R1RHO_FIT_R1, be tested in system test Relax_disp.test_r1rho_kjaergaard_missing_r1().  Bug #22440 (https://gna.org/bugs/?22440): The "NOREX" model is not covering R1rho models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added models MODEL_NOREX_R1RHO and  MODEL_NOREX_R1RHO_FIT_R1 to MODEL_LIST_FULL.  Bug #22440 (https://gna.org/bugs/?22440): The "NOREX" model is not covering R1rho models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented target and calculation function for MODEL_NOREX_R1RHO, MODEL_NOREX_R1RHO_FIT_R1.  Bug #22440 (https://gna.org/bugs/?22440): The "NOREX" model is not covering R1rho models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Made the model "MODEL_NOREX_R1RHO", be testes in system test Relax_disp.test_r1rho_kjaergaard_auto.  This is for system test where R1 has been loaded from earlier results, which was not analysed in relax.  Bug #22440 (https://gna.org/bugs/?22440): The "NOREX" model is not covering R1rho models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Made list of models which fit pA or pA and pB.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added function to auto_analysis, to test if it give meaning to write and plot out the parameter.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Made the writing out of parameter pC, be tested with the new function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented models list with phi_ex, phi_ex_B, and phi_ex_C, and added to test in auto_analyses of relax_disp.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Made use of the dictionary MODEL_PARAMS, to determine if parameter is present.  This makes the list of models belonging to parameter lists superfluous.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Removed unnecessary list of models which support a parameter.  This functionality already exists with the dictionary MODEL_PARAMS.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Rearranged the writing out of parameters in auto_analysis of relax_disp.  This is to prevent writing out all possible  parameters in the final round, if any of those parameters have not been tested.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Extended the writing and checking of parameters, to use different file name, than the parameter name.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Moved the auto-analyses writing out of w_eff and theta into check for has_r1rho_exp_type().  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Re-arranged all model variable lists, to be able to re-use earlier lists.  This is to prevent user errors, when setting up the lists, and re-use the lists through all code.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for MODEL_NOREX_R1RHO_FIT_R1 not being part of list:  MODEL_LIST_DISP.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Moved the auto_analyses plot of special R1rho graphs into the check of has_r1rho_exp_type().  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Moved the auto-analyses plotting and writing of r2, r2a and r2b for CPMG models into test of has_cpmg_exp_type().  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Replaced in auto analysis all instances of 'No Rex' and 'R2eff' with its equivalent defined variables.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Re-arranged plotting and writing in auto-analyses of relax disp, when model is R2eff.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Removed unused variables in auto-analyses of relax_disp.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented the list "MODEL_LIST_NEST", which define which model are used for nesting.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for the nested copying of r2, if using a nested list.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added the equivalent R1 fit models for:  TP02, TAP03, MP05 and NS_R1RHO_2SITE.  The R1 fit models will no be implemented for 3-site models, because there will be to many variables.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added the new R1 fit models to system test Relax_disp.test_r1rho_kjaergaard_missing_r1().  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Split target function of model TP02, into a calc and two func_TP02* variants.  One target function will use measured R1 values, while one target function will use the fitted R1 values.  They will use the same calculation function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for error checking covering R1rho off resonance models in target function.  This is for checking presence of chemical shifts and r1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Split target function of model TAP03, into a calc and two func_TAP03* variants.  One target function will use measured R1 values, while one target function will use the fitted R1 values.  They will use the same calculation function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Split target function of model MP05, into a calc and two func_MP05* variants.  One target function will use measured R1 values, while one target function will use the fitted R1 values.  They will use the same calculation function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for system test Relax_disp.test_r1rho_kjaergaard_auto_check_graphs(), where the special R1rho graphs is no longer produced for the R2eff models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Split target function of model ns_r1rho_2site, into a calc and two func_ns_r1rho_2site* variants.  One target function will use measured R1 values, while one target function will use the fitted R1 values.  They will use the same calculation function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Removed num_points to be used in target and lib function of model ns_r1rho_2site.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added a variable describing the model year, for all relaxation dispersion models.  This could be used, when trying to write up an intelligent detect+select nesting function.  This function need some meta-data describing the models, in order to sort the self.models before calculations, and to select a proper nested model pipe.  Other meta data could be:  Accept of Exp_type, full or normal model for CPMG, fitted or loaded R1 for R1rho, is analytic, silico or numeric type.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added initial unit test class for testing specific_analysis.relax_disp.variables.  There will be more tests added, when a nesting selection function has been written here.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added dictionary for returning year, when using model as key.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added unit test for the dictionary of model years.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Reused the EXP_TYPE_LIST_CPMG and EXP_TYPE_LIST_R1RHO, to combine for the list EXP_TYPE_LIST, the list of all dispersion experiment types.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added a common EXP_TYPE_CPMG MMQ description for models which handle MMQ.  This is part of adding meta data for each model, making it possible to device a sensible nesting selection function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added meta data about EXP_TYPE per model, and made a dictionary for it.  Added unit test for the new dictionary.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added three new EXP_TYPE variables:  EXP_TYPE_R2EFF = 'R2eff/R1rho', EXP_TYPE_NOREX = 'No Rex', EXP_TYPE_NOREX_R1RHO = 'No Rex: R1rho off res'.  These are used to add meta-data information to each model, making it possible to make a nesting function, determining which model to nest from.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added model meta information about number of chemical exchange sites.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added meta information about equation type.  The models are divided into: analytic, silico or numeric.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented nesting function, which will determine which model to nest from.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * In auto analysis of relax_disp, started implementing the new nesting function.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Modified nesting function to return all model info for the current model, and the comparable model.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for nesting kex, when model is CR72, and analysed models is LM63.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for nesting kex, when model is CR72, and analysed models is IT99.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added a return from the nesting model, if all fails.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Replaced the test, if acquiring the model info to a numerical model from a analytical model.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Improved the printing when nesting parameters from equivalent models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Removed unused import of models in auto-analyses of relax_disp.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Improved the printing of system test Relax_disp.test_r1rho_kjaergaard_missing_r1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Improved the printing of system test Relax_disp.test_r1rho_kjaergaard_missing_r1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added function to sort models before auto-analyses.  They are sorted in order:  exp_type: EXP_TYPE_R2EFF, EXP_TYPE_NOREX, EXP_TYPE_NOREX_R1RHO, EXP_TYPE_CPMG_SQ, EXP_TYPE_CPMG_MMQ, EXP_TYPE_R1RHO;  equation: EQ_SILICO, EQ_ANALYTIC, EQ_NUMERIC;  Nr of chemical sites: 2 or 3;  Year: Newest models first;  Nr of parameters.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added unit test, to test the expected sorting of models for auto-analyses.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added more models to be tested in system test Relax_disp.test_r1rho_kjaergaard_auto.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented the sorting of models, for auto-analyses.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Implemented partial reading of results file.  Before reading a results file, it is determined if the file exists.  This makes is possible to read a directory with partial results from a previous analysis.  This can be handsome, if reading R2eff values in R1rho experiments, and the error estimation has been prepared with a high number of Monte Carlo simulations.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added keyword to relax_disp auto analysis, if R2eff values should be optimised.  Here optimisation means minimisation and Monte Carlo simulations of the error.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Modified system test Relax_disp.test_r1rho_kjaergaard_missing_r1 to load previous R2eff values, and not optimise them.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix in back end for relax_disp.parameter_copy, where r2a and r2b should be skipped, since it has already been copied.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Locked values in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.  This is possible after locking the R2eff values and errors from a previous run.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Removed MODEL_NS_CPMG_2SITE_EXPANDED to be analysed in system test test_hansen_cpmg_data_missing_auto_analysis.  The new ordering of models, will make MODEL_NS_CPMG_2SITE_EXPANDED be analysed first, and results copied to model CR72.  This will interfere with the old results.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Lowered the precision of dw for model NS CPMG 2-site expanded, in system test est_hansen_cpmg_data_auto_analysis_numeric.  Model NS CPMG 2-site expanded is now analysed before MODEL_CR72, which alter the values a bit.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added GUI text for parameter r1_fit.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added front-end description of the 6 new R1 fit R1rho models for relax_disp.select_model.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added a paragraph for the no chemical exchange model in help text description for selecting models.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added the new R1rho models where R1 is fitted, to the GUI model selection.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Deleted system test test_r1rho_kjaergaard_man, since it was no necessary.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Deleted unused script files in data folder for Kjaergaard_et_al_2013.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for the linear constraints where parameter r1_fit was written as R1_fit.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Fix for the numbers of parameters not getting counted correct.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Triggering an error in test_r1rho_kjaergaard_missing_r1.  There is a bug fetching the standard value of parameter 'r1_fit'.  AttributeError: 'float' object has no attribute 'keys'.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Removed unused scripts in folder of Kjaergaard et al., 2013.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Added new analysis scripts in folder of Kjaergaard et al., 2013.  Sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models.
        * Removed triggering an error in test_r1rho_kjaergaard_missing_r1.  There is a bug fetching the standard value of parameter 'r1_fit'.
        * Fix for system test Relax_disp.test_r1rho_kjaergaard_missing_r1, running on 64 bit system.
        * Inserted LaTeX bibliography for reference to linear constraints of the exchange rate.
        * Equation fix for $kex$ in manual.
        * Added system test Relax_disp.test_bug_22477_grace_write_k_AB_mixed_analysis and data.  This is for bug #22477 (https://gna.org/bugs/?22477): Not possible to perform grace.write() on k_AB parameter for mixed CPMG analysis.
        * Added more printout to system test Relax_disp.test_bug_22477_grace_write_k_AB_mixed_analysis and data.
        * Fix for system test Relax_disp.test_bug_22477_grace_write_k_AB_mixed_analysis.  Bug #22477 (https://gna.org/bugs/?22477): Not possible to perform grace.write() on k_AB parameter for mixed CPMG analysis.
        * Set the default value of r1_fit to 5.0.
        * Added the relax_disp pipe type to be setup for unit tests of value function.
        * Setup a unit test for the value.set functionality for param r1_fit.  Bug #22470 (https://gna.org/bugs/?22470): value.set does not work for parameter r1_fit.
        * Fix in relax_disp API, how to handle the r1_fit parameter type.  Bug #22470 (https://gna.org/bugs/?22470): value.set does not work for parameter r1_fit.
        * Modified system test Relax_disp.test_r1rho_kjaergaard_missing_r1 to use GRID_INC=None, and thereby speeding up the analysis.  Bug #22470 (https://gna.org/bugs/?22470): value.set does not work for parameter r1_fit.
        * Added to system test a count of number of headers and values, when issuing a value.write().  Sr #3121 (https://gna.org/support/?3121): Support request for replacing space in header files for the value.write functions.
        * Fix for replacing spaces " " with "_" in header files.  Sr #3121 (https://gna.org/support/?3121): Support request for replacing space in header files for the value.write functions.
        * Fix for comment, which mentions R2 parameter, when it relates to R1 fit.
        * Replaced variable name: MODEL_PARAM_INV_RELAX_TIMES with MODEL_LIST_INV_RELAX_TIMES, to match all of the other MODEL_LIST_* variables.  Also added a newline to end of file.
        * Replaced remaining variable names: MODEL_PARAM_* with MODEL_LIST_*, to match all of the other MODEL_LIST_* variables.
        * Renamed R1rho off resonance models where R1 is fitted.  This removes the "underscore".  This is a better representation presented to the user, for example in the GUI model selection list or the relax_disp.select_model user function in all UI.
        * Renamed the parameter "r1_fit" to "r1".  This naming fits better to all other parameters.
        * Split the unit test of specific_analyses.relax_disp.checks.get_times() into its own unit test file.
        * Added a "check" function, what will determine if R1 data is missing for a model to analyse.  Also added corresponding unit tests, to test the functionality.
        * Modified in documentation, that the "No Rex" model have one chemical exchange site, namely itself.
        * Copied variables.py to model.py.  There should not exist any functions in variables.py.  It should only consist of hardcoded variables, and the functions related to model sorting and nesting is split into its own file.
        * Parted the file of variables.py into model.py.
        * Removed the unit test regarding model.py in test_variables.py.
        * Added unit tests regarding model.py and its functions.
        * Removed the auto-sorting of models, when performing auto analysis of Relaxation dispersion.  This was discussed in: http://thread.gmane.org/gmane.science.nmr.relax.scm/22733, http://thread.gmane.org/gmane.science.nmr.relax.scm/22734, http://thread.gmane.org/gmane.science.nmr.relax.scm/22737.  Through this discussion, it has appeared that the order of how models are sorted for analysis, and hence the possibility for nesting, is a complicated case.  The order of analysis should be possible to manually put into the auto analysis.  This was not the scope of sr #3135 (https://gna.org/support/?3135): Optimisation of the R1 relaxation rate for the off-resonance R1rho relaxation dispersion models to implement such a feature.  Such a feature could be implemented for the next version of relax.  It could be designed as function to "suggest" an order in the GUI.  But this functionality would have to wait.
        * Removing the 'tex'->'kex' conversion, and 'phi_ex' from dw and pA.  This solution is not a proper implementation, but these parameters should rather be found by grid search.
        * Re-inserted "MODEL_NS_CPMG_2SITE_EXPANDED" to be tested in system test test_hansen_cpmg_data_missing_auto_analysis.
        * Removed special cases for nesting.  Now following order is determined.  First sort completed models into: EQ_NUMERIC, EQ_SILICO, EQ_ANALYTIC.  Then into year, with newest first.  Then number of chemical sites, which reflects number of parameters.  Go through the completed models.  If the experiment types are the same, then look for:  If a completed model has same parameters, then nest from this.  If a completed model has all other parameters than R20 parameters, then nest from this.  Special cases are taken care of by: MODEL_LM63_3SITE from MODEL_LM63, MODEL_NS_MMQ_3SITE, MODEL_NS_MMQ_3SITE_LINEAR from MODEL_NS_MMQ_2SITE, MODEL_NS_R1RHO_3SITE, MODEL_NS_R1RHO_3SITE_LINEAR from MODEL_NS_R1RHO_2SITE, MODEL_MMQ_CR72 from MODEL_CR72.  This functionality represents the hard-coding from previous implementation.
        * Moved the nesting lists down in variables file.
        * Small verb tense fix for the descriptions of the '* R1 fit' relaxation dispersion models.
        * Added definition and dictionary, for each model, to determine which model they nest from.  This is better to hardcode, since it makes it possible to produce a table with an overview, and accurately determine which model is nested from.  This is discussed in thread http://thread.gmane.org/gmane.science.nmr.relax.devel/6684.
        * Moved the lookup in dictionaries for model information, into the class of model info.
        * Division of unit tests of specific_analyses/relax_disp/model.py into different functions.  Also added more print information to each tests.
        * Added the ordered list of nest models to the class of model information.
        * Modified the defined list of nesting, according to thread:  http://thread.gmane.org/gmane.science.nmr.relax.devel/6684.  More specific, thread: http://thread.gmane.org/gmane.science.nmr.relax.devel/6694.
        * Modified unit test regarding finding correct nested model.  This was discussed in: http://thread.gmane.org/gmane.science.nmr.relax.devel/6684.  More specific, thread: http://thread.gmane.org/gmane.science.nmr.relax.devel/6694.
        * Modified nesting function, to pull list of possible models from dictionary, and check if these models are available in the completed models.
        * Added initial Python script, to help print each model and its corresponding nested models.  It can be executed by: relax test_suite/shared_data/dispersion/print_model_info/print_model_info.py.
        * Added a relaxation dispersion example to show how certain literature statements are just utter crap.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.scm/22774/focus=6693, and the change http://thread.gmane.org/gmane.science.nmr.relax.scm/22774 which implement such dangerous literature conjectures.  To see how a real minimum is excluded from the optimisation space, here for residue :2, execute the R1rho_analysis.py script in relax.  This is synthetic data generated with kex = 1e5 assuming the model TP02.  For the case of residue :2, this still produces an optimisable minimum in the space and dispersion curves.  However the change blocks optimisation to the minimum.
        * Added a function to determine how to nest/copy the parameters, when nesting from another model.  It takes the list of parameters from the current model, and the list of parameters available in the nested model, and return a dictionary of parameter conversion for the current model params.
        * Added unit test for the new function which determine how parameters are copied for a nested model parameters.
        * Added a table for dispersion model nesting in the auto-analysis to the manual.  This adds the ideas discussed in the thread http://thread.gmane.org/gmane.science.nmr.relax.devel/6684.
        * Added the string 'me' for Methods in Enzymology to the bibtex file for the manual.
        * Set the average value of R1 to 2.0 instead of 5.0.  This is "normally" a better guess for R1.
        * Implemented the function, which translates how parameters are copied from a nested model in the auto_analyses for relax_disp.  This makes it possible to test the translating code, and makes logic clearer in the auto_analyses.
        * Modified the r1rho_off_res_tp02_high_kex dispersion test data.  The kex value is now set to 2e5.
        * Removed the 'DPL94 R1 fit' model nesting from the table in the dispersion chapter of the manual.  This was identified using the dispersion test suite data script print_model_info/print_model_info.py (http://thread.gmane.org/gmane.science.nmr.relax.scm/22823).
        * Added to system test Relax_disp.test_r1rho_kjaergaard_missing_r1 to check, that values are not None when writing .out files.  This is related to: https://gna.org/support/?3121 sr #3121: Support request for replacing space in header files for the value.write functions.  The fix for this bug, destroyed getting the values.
        * Fix for earlier bug fix destroyed functionality.  Altering the data-keys to early, meant that data was not fetched correctly.  This is related to: https://gna.org/support/?3121 sr #3121: Support request for replacing space in header files for the value.write functions.
        * Moved the unit test of specific_analyses.relax_disp.checks.check_missing_r1() from a unit test to a system test.  This is because the unit test involved several functions of relax.
        * Inserted dictionary, that will convert a R1rho off-resonance without R1, to the corresponding model which fit R1.
        * Inserted to the check of missing R1, that MODEL_NOREX_R1RHO also depends on R1.
        * Implemented function that determine if any model in the list of all models should be replaced or inserted as the correct 'No Rex' model.  It also translate the R1rho off-resonance model to the corresponding 'R1 fit' models, if R1 is not loaded.
        * Inserted system test Relax_disp.test_convert_no_rex_fit_r1, which test the return for the function that will determine if models self.models in the relax_disp should be translated/corrected.
        * Fix for unit test, where the standard value of R1 was lowered from 5.0 to 2.0.  Also fixed an import error in another unit test.
        * Minimised the dependencies of the version module.  This no longer relies on the dep_check module.
        * Inserted return of True/False flags from function which convert models.  The flag tells if:  flag if 'No Rex' model for R1rho off-resonance was translated;  flag if 'No Rex' model for R1rho off-resonance was inserted; flag if R1rho off-resonance was translated to 'R1 fit' models if no R1 data was found.
        * Changes to system test, after the number of returns from function has been altered.
        * Inserted into relax_disp auto_analyses, to convert the input models.  This will convert/insert the correct 'No Rex' to the corresponding 'No Rex' model for R1rho off-resonance models.  It will also translate to the corresponding 'R1 fit' model, if no 'R1 data' has been loaded with relax_data.read() function.
        * Lowering of precision in system test Relax_disp.test_r1rho_kjaergaard_missing_r1().  This is due to 64/32-bit issues, between analysing on Linux computer, and testing on Mac computer.
        * Made the GUI selection of models for relaxation dispersion more simple.  After the implementation of a function which will translate the models, the 'No Rex' model will be converted to the 'No Rex' model for R1rho off-resonance.  Also the corresponding 'R1 fit' model will be chosen instead, if R1 data has not been loaded.  This makes the model selection easier in the GUI interface.
        * Bugfix for Relax_disp.test_bug_21715_clustered_indexerror, where only 'R2eff', 'No Rex' is analysed.  This special case was not tested in the translating function.
        * Shortening the text in the auto_analysis, and raises a warning if R1 data has not been loaded.
        * Rewrote the logic of the key-word 'optimise_r2eff' in the auto-analyses of relax disp.  If R2eff result file exist in the 'pre_run_dir', this is loaded.  If the results contain both values, and errors, then no optimisation is performed on the R2eff model.  Unless the 'optimise_r2eff' flag is raised, which is not standard.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test on MS Windows.  This is for 32-bit MS Windows systems where the parameter checks need to be loosened.
        * Fixes for the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test on MS Windows.  This is for 32-bit MS Windows systems where the parameter checks need to be loosened.
        * Created the specific_analyses.relax_disp.data.is_r1_optimsed() function.  This follows from an idea for handling R1 optimisation in the tread at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.  This relaxation dispersion function can be used anywhere that requires the knowledge that R1 values should be fitted during optimisation or if loaded values should be used.
        * Implemented the very basic relax_disp.r1_fit user function.  This is as discussed at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6737.
        * Implemented the specific_analyses.relax_disp.parameters.r1_setup() function.  This matches the description at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6739 and http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.
        * Spelling fix for the is_r1_optimised() function name.
        * Implemented to the back_end of the value.copy, a "force" flag to overwrite destination value.
        * Implemented to the front_end of the value.copy, a "force" flag to overwrite destination value.
        * Copying the R2eff value from the reading of R2eff results in the auto-analyses of relax_disp.
        * Fix for the misspelled is_r1_optimised() function.
        * The r1_fit flag is stored in the Disp_minimise_command class and passed into the target function.  This matches the details at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.  The specific_analyses.relax_disp.optimisation.Disp_minimise_command class calls is_r1_optimised() and stores the result.  This is then passed into the relaxation dispersion target function class.
        * Modified that 'NS CPMG 2-site expanded' will be preferred before 'NS CPMG 2-site 3D' and 'NS CPMG 2-site star'.
        * Modified the nesting for 'NS MMQ 3-site linear'.  'NS MMQ 3-site linear' should be able to nest from 'NS MMQ 3-site'.
        * Fix to unit test, after MODEL_NS_CPMG_2SITE_EXPANDED has been preferred over other numerical CPMG models.
        * Modified to unit test, that when model: MODEL_PARAMS_NS_R1RHO_3SITE  nest from: MODEL_PARAMS_NS_R1RHO_2SITE  the conversion should be: 'r2', 'r2' 'pA', 'pA' 'dw_AB', 'dw' 'kex_AB', 'kex' 'pB', '1 - pA' 'dw_BC', 'dw' 'kex_BC', 'kex' 'kex_AC', 'kex'.  Here '1 - pA' is a special conversion flag.
        * Implemented the special flag '1 - pA', when nesting parameters from models with fewer chemical sites.
        * Implemented the nesting of parameters from a model with fewer chemical sites when nesting for NS R1rho 3-site.
        * Inserted system test Relax_disp.test_model_nesting_and_param() which will go through all models, and then through all it nested models, testing that all parameters have a conversion.
        * Modified system test Relax_disp.test_model_nesting_and_param() to only print, when the converted parameter is different from the original parameter.
        * Fix for parameter conversion when model is: MODEL_PARAMS_NS_R1RHO_3SITE or MODEL_PARAMS_NS_R1RHO_3SITE_LINEAR.
        * Fix for parameter conversion for:  MODEL_PARAMS_NS_MMQ_3SITE and MODEL_PARAMS_NS_MMQ_3SITE_LINEAR.
        * Fixes to unit tests, after parameter conversion have been corrected.
        * Replaced that folder names for writing out results should be with replaced with underscores "_".  This is for the dispersion auto-analysis.
        * Fixes for the relaxation dispersion loop_parameters() function.  The R1, R20, R20A, R20B (and R1rho_prime, R1rho_primeA, R1rho_primeB) parameters are now checked for in each spin container rather than just the first of the cluster.  This should make no difference as all spins should have the same model and parameters, but it might be a source of bugs in the future.
        * The r1_fit flag is now used to switch between dispersion target functions.  This is as described in http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.  The change makes the '* R1 fit' models now redundant.
        * Removed all of the '* R1 fit' models out of the relax_disp.select_model user function frontend.  These models are now redundant as the question of R1 fitting is now determined internally in relax.
        * Removed all of the MODEL_*_FIT_R1 dependencies from the specific_analyses.relax_disp package.  These models are now redundant as the question of R1 fitting is now determined internally in relax.
        * Fix for the specific_analyses.relax_disp.data.is_r1_optimised() function for on-resonance R1rho data.  This function needs to specifically catch these models.
        * Fix for the MODEL_LIST_R1RHO variable.  Recent changes causes this to not include the on-resonance R1rho dispersion models.
        * Import fix for the Relax_disp.test_model_nesting_and_param system test.  Somehow the import of the convert_no_rex() function was lost.
        * Modified the MODEL_LIST_R1RHO_OFF_RES list to include MODEL_NOREX_R1RHO.
        * The specific_analyses.relax_disp.parameters.r1_setup() function is now being called.  This happens before the R1 data is returned in the Disp_minimise_command class.
        * The dispersion auto-analysis now handles the optional R1 parameter correctly.  The value.set user function was no longer setting the R1 parameter to the default value when the grid search was deactivated, as it is no longer in MODEL_PARAMS.  So instead the new is_r1_optimised() function is being used to decide if the value.set user function should set the 'r1' parameter value.
        * The dispersion loop_parameter() function now calls r1_setup() to handle R1 parameters correctly.  This allows the R1 parameter to be removed or added to the parameter list prior to looping over the parameters of the model.  The change is required to allow for the dynamic handling of R1 parameters.
        * The dispersion back_calc_r2eff() function can now handle the dynamic R1 parameter.  This required a call to r1_setup() to add or remove the parameter, and is_r1_optimised() to obtain the r1_fit flag to be sent into the target function class.
        * Updated the specific_analyses.relax_disp.model.Model_class class to handle the dynamic R1 parameter.  The class variable self.params now has the 'r1' parameter prepended to the list if is_r1_optimised() returns True.
        * More changes for specific_analyses.relax_disp.model.Model_class for the dynamic R1 parameter.  The 'r1' parameter is only prepended to self.params if it is not already in the list.
        * Created the MODEL_LIST_FIT_R1 variable to keep track of dispersion models with R1 fitting support.
        * The is_r1_optimised() function now checks MODEL_LIST_FIT_R1.  If the model is not in MODEL_LIST_FIT_R1, i.e. R1 optimisation is not supported, then the function will return False.
        * Fix for the test_nesting_param_5 unit test.  The 'r1' parameter is now dynamic and hence will not be present in the initial list.
        * One final fix for the Model_class.params list with 'r1'.  The is_r1_optimised() function is now called with the model name argument, as required.
        * Updated the relax_disp.r1_fit user function docstring.  This now includes information about which models support R1 parameter optimisation.
        * Removed results files to allow the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test to pass.  These are the test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/check_graphs/mc_2000/ results files for the 'No Rex' and 'DPL94' models, as well as the final run.  This commit is to allow the test to temporarily pass.  It can be reverted once a better solution is discussed and decided upon.
        * Altered the number of Monte Carlo simulations in test script to 2000.
        * Merger of the 'No Rex' and 'No Rex R1rho off res' models in the specific_analyses.relax_disp package.  In the 'variables' module, all *_NOREX_R1RHO variables have simply been deleted and the MODEL_LIST_* structures updated.  For the 'data' module, the is_r1_optimised() function was modified to catch the 'No Rex' model and to then use the cdp.exp_type_list structure to determine if the experiment type is EXP_TYPE_R1RHO.  This will be modified in the future by using a function for determining if the current experiment is on or off-resonance.  The return_r1_data() and return_r1_err_data() functions have also been modified to check if R1 values are fit rather than if the model is in MODEL_LIST_R1RHO_OFF_RES.  In the 'model' module, in addition to deleting all *_NOREX_R1RHO variables, the convert_no_rex() function has also been deleted as it no longer serves a purpose.  In the 'checks' module, all 'No Rex R1rho off res' model references have been replaced with 'No Rex'.
        * Updated the dispersion auto-analysis for the universal 'No Rex' model.  The 'No Rex R1rho off res' references have all been deleted.  The model conversion logic is also no longer needed and has been deleted.
        * Converted the relaxation dispersion GUI interface to the unified 'No Rex' model.  All of the MODEL_NOREX_R1RHO references have simply been deleted.
        * Converted the relaxation dispersion target function class to the unified 'No Rex' model design.  On top of removing all references to MODEL_NOREX_R1RHO, the aliasing of self.func now checks the experiment type list to determine which target function to use.  This is not an ideal solution and will not handle mixed CPMG and R1rho experiment, however neither will the target functions yet.  The creation of the off-resonance data structures has also been modified so that they are now R1rho independent.  This allows the structures to be properly created while at the same time enabling this code to be compatible with off-resonance CPMG data in the future.
        * Removed the 'No Rex R1rho off res' model from the relax_disp.select_model user function frontend.
        * Removed all references to the 'No Rex R1rho off res' model in the system tests.  In addition, the Relax_disp.test_convert_no_rex system test has been deleted as it no longer has a purpose.  For the Relax_disp.test_model_nesting_and_param system test, to allow this to work the cdp.exp_type_list list is set to EXP_TYPE_LIST.
        * Removed all references to the 'No Rex R1rho off res' model in the unit tests.
        * Updated the 'No Rex' dispersion model description in the relax manual.  The universal nature of the model is now described, including the addition of the off-resonance CPMG and R1rho equations for the absence of chemical exchange.  The R1 parameter optimisation is also shortly covered.
        * Added a subsection to the dispersion chapter of the manual about R1 parameter optimisation.
        * Added the R1 parameter fitting GUI element to the dispersion GUI tab.  This is a simple Boolean toggle element that allows the R1 optimisation to be turned on.  The value is passed into the auto-analysis.
        * Added the r1_fit argument to the relaxation dispersion auto-analysis.  When this is True, the relax_disp.r1_fit user function will be called to turn R1 parameter fitting on.
        * Added the relax_disp.spin_lock_offset user function to the dispersion GUI.  This has been added to the pop up menu in the spectrum list GUI element, when the relax_disp_flag has been set.  It simply mimics the relax_disp.spin_lock_field functionality already present.  This follows from task #7820 (https://gna.org/task/?7820).
        * Fix for the relax_disp.spin_lock_offset user function in the dispersion GUI tab.  This is in the spectrum list element popup menu.
        * Added the offset column to the spectrum list GUI element for the dispersion analysis.  This is to complete task #7820 (https://gna.org/task/?7820).  The spectrum list GUI element add_offset() method has been added to insert the offset column when the relax_disp_flag is set.  This is called by the update_data() method to fill and update the GUI element.
        * Implemented the GUI test Relax_disp.test_bug_22501_close_all_analyse to catch bug #22501 (https://gna.org/bugs/?22501), 'Close all analyses' raises error.
        * Inserted intermediate system test, to profile R2eff calculation for R1rho.  System test is: Relax_disp.test_bug_9999_slow_r1rho_r2eff_error_with_mc.  This system test actually fails, if one tries to do a grid search.  This is related to the R2eff values stored as dictionary, and pipe_control.minimise.grid_setup() will fail.  The function 'isNaN(values[i])' cannot handle dictionary.
        * Modified intermediate system test Relax_disp.test_bug_9999_slow_r1rho_r2eff_error_with_mc to see if the initial grid search for 'i0' and 'R2eff' estimation can be skipped.  This is done by converting the exponential curve, to a linear curve, and calculate the best parameters by a line of best fit by least squares.  This seems like a promising method as an initial estimator of 'i0' and 'r2eff'.  For 500 to 2000 Monte Carlo simulations, this could have an influence on the timings, as all grid searchs could be skipped.
        * Modified system test test_bug_9999_slow_r1rho_r2eff_error_with_mc to save data arrays.  This is to prepare a profiling script.
        * Added start script with basic data for profiling the relax curve fit.
        * Created the Structure.test_create_diff_tensor_pdb system test.  This is to show the failure of the structure.create_diff_tensor_pdb user function when no structural data is present.
        * Created the Structure.test_create_diff_tensor_pdb2 system test.  This is to catch another situation leading to bug #22505 (https://gna.org/bugs/?22505), the failure of the structure.create_diff_tensor_pdb user function when no structural data is present.
        * Added an optimisation script for the test_suite/shared_data/diffusion_tensor/ellipsoid relaxation data.  This is to help catch bug #22502 (https://gna.org/bugs/?22502), the geometric prolate diffusion representation does not align with axis in PDB, as reported by Martin Ballaschk (https://gna.org/users/mab).  The PDB files of the optimised tensor demonstrate exactly the same problem as seen in the files attached to the bug report.  The oblate and spherical diffusion tensor representations match that of the ellipsoid.  But the prolate axis and tensor orientation are both different from the ellipsoid as well as themselves.
        * Updated the diffusion tensor PDB representation files.  This replaces the broken prolate representation with the corrected representation.
        * Deleted the duplicated Structure.test_create_diff_tensor_pdb system test.
        * Created a number of system tests to check the diffusion tensor PDB representation.  This is to prevent bugs such as #22502 (https://gna.org/bugs/?22502) from ever reappearing.  The PDB file contents are hardcoded into the tests and checked.  The tests include Structure.test_create_diff_tensor_pdb_ellipsoid, Structure.test_create_diff_tensor_pdb_oblate, Structure.test_create_diff_tensor_pdb_prolate, and Structure.test_create_diff_tensor_pdb_sphere.
        * Improved data checking for all of the Structure system tests.  Before looping over the structural data, the number of lines in the real file and the newly generated file are compared.  This avoids the situation whereby an empty file is produced, accidentally allowing the test to pass.
        * Modified following functions (time points are now saved at the [ei][mi][oi][di] index level, at this index level all time points are saved for the R2eff point):  interpolate_disp(), to interpolate time points, all time points through the original dispersion points di, are collected and then made unique - this time list can potentially be the largest of all time lists;  interpolate_offset(), to interpolate time points, all time points through the original offset points, and then dispersion points di, are collected and then made unique - this time list can potentially be the largest of all time lists;  plot_disp_curves_to_file(), to acquire the original relax_times points;  return_r2eff_arrays(), to save all time points on the level of [ei][mi][oi][di].  At this index level, it will be a numpy array list with all time values used for fitting.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Modified back_calc_r2eff() to accept interpolated time points.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Modified target function of relax dispersion, to use the new list of time points, which are of higher dimension.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Fix to system test Relax_disp.test_r1rho_kjaergaard_missing_r1().  After the relaxation times have been fixed, this model now return reasonable chi2 values.  The reported parameters are though quite different from all other models, and it seems something may still be wrong.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Fix for system test Relax_disp.test_exp_fit(), where the spin.isotope was not set.  The new call to return_r2eff_arrays(), when producing graphs, raise RelaxSpinTypeError() if no isotope is set.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Modified the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test to pass on 64-bit Linux systems.  The accuracy of the checks of the optimised values have been decreased.
        * Moved the storing of relax time up before check of missing data in return_r2eff_arrays().  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Fix for system test not adding spin.isotope to setup information.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Fix for looping over data indices, where tilt_angles has the si index.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Added Nikolai's original Matlab code to the lib.dispersion.ns_r1rho_2site module docstring.  This is the code taken directly form the original funNumrho.m file, which was the origin of the code in this module.
        * Further extended the profiling script for curve fitting.  Now profiling is in place for the implemented C code method in relax.  A similar code should now be devised for numpy array for comparing.  But this profiling shows that when contraints=True, is slowing down this procedure by a factor 10 X.
        * Further improved the profiling of relax curve fit.  This profiling shows, that Python code is about twice as slow as the C code implemented.  But it also shows that optimising with scipy.optimize.leastsq is 20 X faster.  It also gives reasonable error values.  Combining a function for a linear fit to guess the initial values, together with scipy optimise, will be an extreme time win for estimating R2eff values fast.  A further test would be to use relax Monte Carlo simulations for say 1000-2000 iterations, and compare to the errors extracted from estimated covariance.
        * Added verification script, that shows that using scipy.optimize.leastsq reaches the exact same parameters as minfx for exponential curve fitting.  The profiling shows that scipy.optimize.leastsq is 10X as fast as using minfx (with no linear constraints).  scipy.optimize.leastsq is a wrapper around wrapper around MINPACK's lmdif and lmder algorithms.  MINPACK is a FORTRAN90 library which solves systems of nonlinear equations, or carries out the least squares minimization of the residual of a set of linear or nonlinear equations.  The verification script also shows, that a very heavy and time consuming Monte Carlo simulation of 2000 steps, reaches the same errors as the errors reported by scipy.optimize.leastsq.  The return from scipy.optimize.leastsq, gives the estimated covariance.  Taking the square root of the covariance corresponds with 2X error reported by minfx.  This could be an extremely time saving step, when performing model fitting in R1rho, where the errors of the R2eff values, are estimated by Monte Carlo simulations.  The following setup illustrates the problem.  This was analysed on a MacBook Pro, 13-inch, Late 2011 with no multi-core setup.  Script running is: test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/2_pre_run_r2eff.py.  This script analyses just the R2eff values for 15 residues.  It estimates the errors of R2eff based on 2000 Monte Carlo simulations.  For each residues, there is 14 exponential graphs.  The script was broken after 35 simulations.  This was measured to 20 minutes.  So 500 simulations would take about 4.8 Hours.  The R2eff values and errors can by scipy.optimize.leastsq can instead be calculated in: 15 residues * 0.02 seconds = 0.3 seconds.
        * Moved the target function for minimisation of exponential fit into the target functions folder.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented initial system test Relax_disp.test_estimate_r2eff for setting up the new user function to estimate R2eff and errors by scipy.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added front end user function relax_disp.r2eff_estimate to estimate R2eff and errors by exponential curve fitting in scipy.optimize.leastsq.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified check for model, to accept model as input, for error printing.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented back end for estimating R2eff and errors by exponential curve fitting with scipy.optimize.leastsq.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Documentation fix for new exponential target function.  Also added new function to estimate R2eff and i0 parameters, before minimisation.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Small changes to verification scripts, to use chi2 function and use the scaling matrix correct.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Split up of system test test_r1rho_kjaergaard_missing_r1, into a verification part.  This is to test the new r2eff estimation, which should get the parameter values, as a this 2000 Monto Carlo simulation.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified system test Relax_disp.test_estimate_r2eff.  This is to compare against errors simulated with 2000 MC.  The parameters are comparable, but not equal.  Mostly, it seems that the errors from scipy.optimize.leastsq, are twice as high than the Monte Carlo simulations.  This affect model fitting, and the calculated chi2 value.
        * Added system test Relax_disp.test_estimate_r2eff_error().  This is to get insight in the error difference between 2000 Monto Carlo simulations and then scipy.optimize.leastsq.
        * Add dependency check for scipy.optimize.leastsq.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Lowering precision in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.  This is R1 estimation with MODEL_NS_R1RHO_2SITE.  The lowering of precision is due different system precision.
        * Reused the dependency check "scipy_module", since leastsq() has been part of Scipy since 2003.
        * Moved target function for curve fitting with scipy into specific_analyses.relax_disp.estimate_r2eff.  This will later include the backend specific_analyses.relax_disp.optimisation.estimate_r2eff() function and the code in the target_functions package.  The code in target_functions.relax_disp_curve_fit is a lot more than just a target function, so it doesn't really belong in this package.  This is also to isolate this experimental feature.
        * Isolated all code related to user function relax_disp.r2eff_estimate into independent module file.  All has been isolated to: specific_analyses.relax_disp.estimate_r2eff.
        * Split function to minimise with scipy.optimize.leastsq out in estimate_r2eff module.  This is to prepare for implementing with minfx.
        * Implemented first try to minimise with minfx in estimate_r2eff() function.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implementation of the target_functions.relax_fit.jacobian() function.  This follows from the discussions at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807.  The function will calculate the Jacobian matrix for the exponential curve-fitting module.  The Jacobian can be used to directly calculate the covariance matrix, for example as described at https://www.gnu.org/software/gsl/manual/html_node/Computing-the-covariance-matrix-of-best-fit-parameters.html.  The Jacobian is calculated using the help of the new exponential_dI() and exponential_dR() functions in the target_functions/exponential.c file.  These calculate the partial derivatives of the exponential curve with respect to each model parameter separately.  The implementation still needs testing and debugging.
        * Fixes for the new target_functions.relax_fit.jacobian() function.  The Python list of lists is now correctly created and returned.
        * Turned off the optimisation constraints for the 'R2eff' model in the dispersion auto-analysis.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.scm/22977/focus=6829.  This model does not require constraints at all, and the constraints only cause the optimisation to take 10x longer to complete.  Therefore the constraint flag has been set to False for the model.
        * Initial try to form the Jacobian and Hessian matrix for exponential decay.  This can be tried with system test: relax -s Relax_disp.test_estimate_r2eff_error.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Intermediate step in estimate R2eff module.  It seems that minfx is minimising in a quadratic space because of the power of chi2, while the general input to scipy.optimize does not do this.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Cleaned up target function for leastsq, since arguments to function can be extracted from class.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Tried to implement with scipy.optimize.fmin_ncg and scipy.optimize.fmin_cg, but cannot get it to work.  The matrices are not aligned well.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented the chi-squared gradient as a C module for the target functions.  This simply translates the Python code into C to allow any target function C modules to build its own gradient function.
        * Implemented the target_functions.relax_fit.dfunc() gradient function.  This is using the Python/C interface to provide a Python function for calculating and returned the chi-squared gradient for the exponential curves.
        * Implementation of the specific_analyses.relax_fit.optimisation.dfunc_wrapper() function.  This interfaces with the target_functions.relax_fit C module and converts the gradient from a Python list to a numpy array.
        * The exponential curve-fitting gradient is now scaled by the scaling matrix.
        * Clean up of the end of the target_functions.relax_fit.dfunc() function.
        * Fixes for the target function chi-squared gradient C function.
        * Fixes for all of the exponential functions in target_functions/exponential.c.  The condition whereby Rx is zero is now setting the value correctly - the exponential will be 1, not zero, hence the intensity and gradient values should not be zero.
        * Clean up of the target function C files (spacing fixes and removal of unused code).
        * Changed the argument and variable names in the C code chi-squared gradient function.
        * Modified all of the exponential curve functions and gradients in the C target function module.  Instead of passing in the parameter vector, now the I0 and R values are passed in separately.  This is for greater code flexibility as the parameter order does not need to be known.
        * The parameter index is now passed into exponential_dI0() and exponential_dR().  This is for the relaxation curve-fitting C module so that the indices are not hardcoded.
        * The I0 and R parameter indices are now defined in the target_function/relax_fit.h header file.  This is to abstract the exponential curve parameter indices even more.
        * Big cleanup of estimate R2eff module.  This is to make the documentation more easy to read and understand.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Created 2 unit tests for the target_functions.relax_fit relax C module.  These check the func() and dfunc() Python methods exposed by the module.
        * The relax_fit C module unit tests now check if the parameter scaling is functional.
        * Added several comments to the R2eff estimate module.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added a script and log file for calculating the numerical gradient for an exponential curve.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the gradient using the scipy.misc.derivative() function both at the minimum and at a point away from the minimum.  The values will be used to construct a unit test to check the C module implementation.
        * Created a unit test to check the dfunc() function of the relax_fit C module off the minimum.
        * Fixes for the target_functions.relax_fit C module unit tests.  All values are now set to floats to avoid integer division issues.
        * Activated parameter scaling of the gradient in the test_dfunc_off_minimum() unit test.  This is the test class test_suite.unit_tests._target_functions.test_relax_fit.Test_relax_fit.
        * The exponential curve numeric gradient script now uses only floating point numbers.  This is to avoid integer truncation problems.
        * Fix for the script for calculating the numerical gradient for an exponential curve.  The off-minimum derivative was not correctly calculated.
        * Increased the printouts for the script for calculating the numerical gradient for an exponential curve.
        * Bug fix for the chi-squared gradient calculation in the C module.  The definition of the square() function needed extra brackets so that the 1/error**2 calculation would be 1/(error*error) rather than the incorrect 1/error*error form.
        * Fix for the test_dfunc_off_minimum() unit test.  This is the test class test_suite.unit_tests._target_functions.test_relax_fit.Test_relax_fit.  The wrong gradient was being scaled.
        * Switched the optimisation algorithm in test_suite/system_tests/scripts/relax_fit.py.  This script, used by the Relax_fit.test_curve_fitting_height and Relax_fit.test_curve_fitting_volume system tests, now uses the BFGS optimisation.  This is to demonstrate that the exponential curve gradient function dfunc() is implemented correctly and that more advanced optimisation algorithms can be used (excluding those that require the full Hessian d2func() function).
        * Got the method of 'Steepest descent' to work properly, by specifying the Jacobian correctly.  The Jacobian was derived according to the chi2 function.  The key point was to evaluate the two derivative arrays for all times points, and then sum each of the two arrays together, before constructing the Jacobian.  This clearly shows the difference between minfx and scipy.optimize.leastsq.  scipy.optimize.leastsq takes as input a function F(x0), which should return the array of weighted differences between function value and measured values: "1. / self.errors * (self.calc_exp(self.times, *params) - self.values)".  This will be an array with number of elements 'i' corresponding to number of elements. scipy.optimize.leastsq then internally evaluates the sum of squares -> sum[ (O - E)**2 ], and minimises this.  This is the chi2.  Minfx requires the function to minimise before hand.  So, the "func" should be chi2.  Then the dfunc, and d2func, should be derivative of chi2, but all elements in the array should still be summed together.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Got the Quasi-Newton BFGS to work.  This uses only the gradient, this gets the same results as 2000 Monte Carlo with simplex and scipy.optimize.leastsq.  Error estimation still not provided.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Removed all code regarding scipy.optimize fmin_cg and fmin_ncg.  This problem should soon be able to be solved with minfx.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added initial documentation for multifit_covar.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified profiling script to use the new estimate R2eff module.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified verify error script, to use new estimate R2eff module.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Removed all unnecessary code from estimate R2eff module.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * More removal of code.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Changed the array declarations in the target_functions/exponential C file and header.  Instead of using the pointer format of *xyz, the array format of xyz[] is now being used.  These are equivalent and the later is more obvious that this is an array.
        * Changed the array declarations in the target_functions/c_chi2 C file and header.  Instead of using the pointer format of *xyz, the array format of xyz[] is now being used.  These are equivalent and the later is more obvious that this is an array.
        * Shifted all of the parameter Python lists to C arrays into the new param_to_c() function.  This is for the target_functions.relax_fit C module to avoid much duplicated code.
        * Removed the comment and docstring saying that the exponential curve-fitting gradient is unimplemented.
        * Updated the copyright notices in the C files of the target_functions directory.
        * Implemented the C version of the chi-squared Hessian.  This is a direct translation of the Python code.
        * Changed the internal variables of the chi-squared gradient C code to match the Python code.
        * Standardisation of the array dimensionality in the target function C code.  The new target_functions/dimensions.h header file defines MAX_PARAMS and MAX_DATA which is then included in the header files of all the other C files.  All array declarations now explicitly specify the length of each dimension.  The values of MAX_PARAMS and MAX_DATA have increased from 3 and 50 to 20 and 5000.  This is to allow for models with more parameters and to allow a much larger number of input data points to be supported before memory corruptions happen.  The data structures now take up more memory, but as the functions do not loop up to maximum but only the number of parameters and points specified, this will not make the code slower.
        * All of the C code chi-squared functions now have the array argument dimensions explicitly declared.
        * The target_functions/exponential.c file no longer includes exponential.h.  This is not needed as exponential.h only contains the function definitions of the exponential.c file.
        * Clean up of the header and includes of the target_functions/c_chi2.c file.  The square() function macro has been shifted to the header file and the stdio.h and math.h standard library headers are no longer included as they are not used.
        * Partly implemented the front end target_functions.relax_fit.d2func() C module Python function.  This is not fully implemented as the exponential curve double partial derivatives are not implemented.
        * Implemented the exponential curve second partial derivative C functions.  These are declared in the exponential.h header file and are now used by the Python function target_functions.relax_fit.d2func().
        * The square() function macro is now defined for the target_functions/exponential.c file.  This is defined in the header, and now the exponential.h is included in the C file to access it.
        * Implemented the specific_analyses.relax_fit.optimisation.d2func_wrapper() function.  This converts the numpy parameter array into a Python list, calls the target_functions.relax_fit.d2func() function with this list, converts the Hessian output list of lists into a numpy rank-2 array, and returns it.  This will allow Newton optimisation to be used for the relaxation curve-fitting analysis.
        * Switched the optimisation algorithm in test_suite/system_tests/scripts/relax_fit.py.  This script, used by the Relax_fit.test_curve_fitting_height and Relax_fit.test_curve_fitting_volume system tests, now uses Newton optimisation.  This is to demonstrate that the exponential curve gradient function dfunc() and Hessian function d2func() are implemented correctly.
        * Added a script and log file for calculating the numerical gradient for an exponential curve.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the Hessian using the numdifftools.Hessian object construct and obtain the matrix, both at the minimum and at a point away from the minimum.  The values will be used to construct a unit test to check the C module implementation.
        * Fixes for the Hessian.py script for numerical integrating the Hessian for an exponential curve.
        * Implemented two unit tests to check the Hessian of the target_functions.relax_fit.d2func() function.  This compares the calculated Hessian to the numerically integrated values from the test_suite/shared_data/curve_fitting/numeric_gradient/Hessian.py script, showing that the d2func() function is implemented correctly.
        * Modified profiling script, but it seems that the dfunc from target_functions.relax_fit does not work.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified estimate R2eff module, to use C code.  But system test Relax_disp.test_estimate_r2eff_error shows that the Jacobian is not correctly implemented to be called in minfx.
        * Created an initial test suite data directory for a mixed R1rho + CPMG dispersion analysis.  The generate.py script will be extended in the future to generate both synthetic R1rho and CPMG data for a common exchange process.  Such a data combination should show some minor flaws in the current design of the dispersion analysis and will help to solve these.
        * Improvements to the pipe_control.minimise.reset_min_stats() function.  The minimise statistics resetting is now more elegantly implemented.  And the sim_index keyword argument is accepted by the function and individual Monte Carlo simulation elements can now be reset.
        * Modified wrapper function for curve_fit, to only change to list type, if the type is a ndarray.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * The model-free reset_min_stats() function has been replaced with the pipe_control.minimise version.  The specific_analyses.model_free.optimisation.reset_min_stats() function has been deleted and instead the pipe_control.minimise version is being used.
        * Implemented the first try to compute the variance of R2eff and i0, by the covariance.  This uses the Jacobian matrix.  The errors calculated, are though way to small compared 2000 Monte Carlo simulations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Tried to implement the Jacobian from C code.  This though also report errors which are to small.  Maybe some scaling is wrong.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified profiling script to calculate timings.  The timings for C code are:  Simplex, with constraints = 2.192;  Simplex, without constraints = 0.216;  BFGS, without constraints = 0.079;  Newton, without constraints = 0.031;  This is pretty pretty fast.  To this profiling script, I would also now add some verification on calculations.
        * Tried to verify solution to profiling script.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Set the constraints=False when doing Monte Carlo simulations for R2eff.  This is to speed up the Monte Carlo simulations by a factor X10, when estimating the error for R2eff.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented the use of "Newton" as minimisation algorithm for R2eff curve fitting instead of simplex.  Running the test script: test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/2_pre_run_r2eff.py.  For 50 Monte Carlo simulations, the time drop from: 3 minutes and 13 s, to 1 min an 5 seconds.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Changed the relax_fit.py sample script to use Newton rather than Simplex optimisation.  This can lead to significantly faster optimisation times, as shown in the commit message http://article.gmane.org/gmane.science.nmr.relax.scm/23081.
        * Changed the optimisation description in the relaxation curve-fitting chapter of the manual.  The script example has been converted to match the sample script, replacing the Nelder-Mead simplex algorithm with Newton optimisation, and removing the argument turning diagonal scaling off.  All the text about only the simplex algorithm being supported due to the missing gradients and Hessians in the C module have been deleted.  The text that linear constraints are not supported has also been removed - but this was fixed when the logarithmic barrier constraint algorithm was added to minfx.
        * By using minfx, and the reported Jacobian, it is now possible to get the exact same error estimation as scipy.optimize.leastsq.  The fatal error was to set the weighting matrix with diagonal elements as the error.  There weights are 1/errors**2.  There is though some unanswered questions left.  The Jacobian used, is the direct derivative of the function.  It is not the chi2 derivative Jacobian.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fixed naming of functions, to better represent what they do in module of estimating R2eff.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented the Jacobian of exponential function in Python code.  This now also gets the same error as leastsq and C code.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Tried to implement a safety test for linearly-dependent columns in the covariance matrix.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fixes for the relax_disp.r2eff_estimate user function documentation.  This is to allow the relax manual to compile again as the original documentation was causing LaTeX failures.
        * Clean up of the declarations in the target_functions.relax_fit C module.  The Python list objects are now declared at the start of the functions, and then PyList_New() is called later on.  This allows the code to compile on certain Windows systems.
        * Removed the user function to estimate the R2eff values and errors with scipy.optimize.leastsq.  With the newly implemented Jacobian and Hessian of the exponential decay function, the front-end to scipy.optimize.leastsq does not serve a purpose.  This is because minfx is now as fast as scipy.optimize.leastsq, and can estimate the errors from the Jacobian to the exact same numbers as scipy.optimize.leastsq.  In addition to that, the covariance can be calculated by QR decomposition.  This adds additional feature for checking for a singular matrix.  The back-end will still be kept in place for the coming tim, but could be removed later.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added front-end to the new user function relax_disp.r2eff_err_estimate(), which will estimate the R2eff errors from a pipe and spins with optimised values of R2eff and i0.  The covariance matrix can be calculated from the optimised parameters, and the Jacobian.  Big care should be taken not to directly trust these results, since the errors are quite different compared to the Monte Carlo simulations.  This implementation, will reach the exact same error estimation as scipy.optimize.leastsq.  But with much better control over the data, and insight into the calculations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added method to automatically perform error analysis on peak heights.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified system test Relax_disp.test_estimate_r2eff() to first do a grid search, then minimise and then estimate the errors for R2eff and i0.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added back-end to estimate R2eff errors.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fix to system test test_estimate_r2eff_error(), to first delete the old error estimations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added several tests to: test_estimate_r2eff_error, to compare different output from algorithms.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Cleaned up code in R2eff error module.  Also removed a non working Hessian matrix.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Moved code around, and made function multifit_covar() independent of class object.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Inserted checks for C module is available in module for estimating R2eff error.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Removed unnecessary call to experimental Exp class.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Renamed system test, that test the user function for estimating the R2eff error:  test_estimate_r2eff_err, test the user function. test_estimate_r2eff_err_methods, test different methods for getting the error.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added system test, Relax_disp.test_estimate_r2eff_err_auto and extended functionality to the auto-analyses protocol.  If "exp_mc_sim_num" is set to "-1" and sent to the auto-analyses, the errors of R2eff will be estimated from the covariance matrix.  These errors is HIGHLY likely to be wrong, but can be used in an initial test fase, to rapidly produce data for plotting data.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added script, to be used in GUI test.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added GUI test Relax_disp.test_r2eff_err_estimate, to test the setting of MC sim to -1 for exponential R2eff error estimation.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added keyword "exp_mc_sim_num", to the auto-analyses in the GUI.  This sets the number of Monte Carlo simulations for R2eff error estimation in exponential curve fitting.  When setting to -1, the errors are estimated from the covariance matrix.  These errors are highly likely to be wrong, but can be used in Rapid testing of data and plotting.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Tried to click the "fit_r1" button in the GUI test, but receives an error:  relax --gui-tests Relax_disp.test_r2eff_err_estimate, "AttributeError: 'SpinContainer' object has no attribute 'r1'".  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Moved the mc_sim_num GUI element in the analysis tab ip, as it is executed first.  Also modified the tooltip.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added a warning to the auto-analyses about error estimation from the covariance.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Removed yet another comma from GUI tooltip.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Formatting changes for the lib.periodic_table module.  This is in preparation for extending the information content of this module.
        * Modified system test 'test_estimate_r2eff_err_auto', to use the GUI script.  It seems to work perfect.  This is to test against GUI script: test_r2eff_err_estimate  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified test_estimate_r2eff_err_auto, to set r1_fit to False.  This still make the system test pass, and fit R1.  So this means R1 fit button is not functioning properly.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fix for warning message in the auto-analyses in the GUI.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Tried to improve docstring for API documentation.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added all of the IUPAC 2011 atomic weights to the lib.periodic_table module.  These will be useful for correctly calculating the centre of mass of a molecule.
        * The lib.periodic_table method for adding elements is now private.
        * Created the unit test infrastructure for the lib.periodic_table module.  This includes one unit test of the lib.periodic_table.periodic_table.atomic_weight() function which has not been implemented yet.
        * Implemented the lib.periodic_table.periodic_table.atomic_weight() method.  This returns the standard atomic weight of the atom as a float.
        * Yet another try to make the API documentation working.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented system test Relax_disp.verify_estimate_r2eff_err_compare_mc for testing R2eff error as function of Monte Carlo simulation.  Note, since the name does not start with "test", but with "verify", this test will not be issued in the system test suite.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Converted the periodic table in lib.periodic_table into a dictionary type object.  The new Element container has been added for storing the information about each element in the table.  The Periodic_table object used the atomic symbol as a key for each Element instance.
        * Modified system test test Relax_disp.test_estimate_r2eff_err_methods() to show the difference between using the direct function Jacobian, or the chi2 function Jacobian.  Added also the functionality to the estimate R2eff module, to switch between using the different Jacobians.  The results show, that R2eff can be estimated better.
        * Added isotope information to the lib.periodic_table module including mass number and atomic mass.  A new Isotope data container has been added to store this information.  The Periodic_table._add() method now returns the initialised Element container.  This container has the _add_isotope() method which is used to initialise Isotope data containers with the mass number and atomic mass and append it to the list.
        * Created a unit test for the Periodic_table.atomic_mass() method.  This method is not implemented yet.
        * Changed the method call in the new Test_periodic_table.test_get_atomic_mass unit test.
        * Fix for the Test_periodic_table.test_get_atomic_mass unit test - the method calls were incorrect.
        * Implemented the lib.periodic_table module Periodic_table.atomic_mass() method.  This method will return either the atomic mass of an isotope or the standard atomic weight.
        * Changed the operation of the lib.structure.mass.centre_of_mass() function.  Instead of using the lib.physical_constants.return_atomic_mass() function, the centre_of_mass() function instead uses the lib.periodic_table.periodic_table.atomic_mass() method.  This is a huge improvement in that the exact mass of absolutely all elements are taken into account.
        * Deletion of the lib.physical_constants.return_atomic_mass() function and all relative atomic masses.  These were inaccurate and only included a tiny subset of all standard atomic weight and isotope masses.  The functionality has been replaced by the complete and 100% accurate complete Periodic_table object in the lib.periodic_table module.
        * Fix for the MolContainer.fill_object_from_gaussian() method.  This is in the lib.structure.internal.molecules module.  The Periodic_table.lookup_z_to_symbol()  method in the lib.periodic_table module has been renamed to lookup_symbol().
        * Fix for the Periodic_table.lookup_symbol() method.  The __init__() method of the Periodic_table has been reintroduced to initialise a fast atomic symbol lookup table.  The _add() method then updates this table.  And the lookup_symbol() method now uses this lookup table to correctly return the symbol.
        * Tiny fix for the Diffusion_tensor.test_create_diff_tensor_pdb_ellipsoid system test.  The switch to using the lib.periodic_table module for atomic masses has caused the centre of mass of the ellipsoid to shift just enough that one ATOM coordinate in the PDB file has changed its last significant digit.
        * Created the lib.periodic_table.process_symbol() function.  This will take an atomic symbol and return a copy of it with an uppercase first letter and lowercase second letter.  This is used by the Periodic_table methods atomic_mass() and atomic_weight() to allow for non-standard symbol input, for example if the element name comes directly from the all uppercase PDB file format without translation.
        * Tried to scale the covariance matrix, as explained here: http://www.orbitals.com/self/least/least.htm.  This does not work better.  Also replaced "errors" to "weights" to the multifit_covar(), to better determine control calculations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added all gyromagnetic ratio information from lib.physical_constants to lib.periodic_table.  The Periodic_table.gyromagnetic_ratio() method has been added to allow this value to be easily returned.
        * Added to back-end of R2eff estimate module, to be able to switch between the function Jacobian or the chi2 Jacobian.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified user function 'relax_disp.r2eff_err_estimate', to be able switch between the Jacobians.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified system test Relax_disp.verify_estimate_r2eff_err_compare_mc, to try the difference between the Jacobian.  The results are:  Printing the estimated R2eff error as function of estimation from covariance and number of Monte Carlo simulations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Deleted the gyromagnetic ratio values and return_gyromagnetic_ratio() function from lib.physical_constants.
        * Shifted all of relax to use the lib.periodic_table module for gyromagnetic ratios.  The values and value returning function have been removed from lib.physical_constants and replaced by the Periodic_table.gyromagnetic_ratio() method in the lib.periodic_table module.
        * Started making functions in R2eff estimate module, independent on the informations stored in the Class.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Cleaned up code in R2eff estimate module, by making each function independent of class.  This is to give a better overview, how the different functions connect together.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Made the user function, which estimates the R2eff errors, use the Jacobian derived from chi2 function.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified system test verify_estimate_r2eff_err_compare_mc() to first use the direct function Jacobian, and then the chi2 derived Jacobian.  This shows the result better.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added digit to printout in R2eff estimate module.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Locked values for system test test_estimate_r2eff_err, to estimate how the R2eff error estimation reflects on fitted parameters.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * More locking of values, when trying to use different methods for estimating R2eff err values.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * More locking of values.  This actually shows, that errors should be estimated from the direct Jacobian.  Not, the chi2 Jacobian.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Reverted the logic, that the chi2 Jacobian should be used.  Instead, the direct Jacobian exponential is used instead.  When fitting with the estimated errors from the direct Jacobian, the results are MUCH better, and comparable to 2000 Monte Carlo simulations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Various precision fixes for different machine precision.  This is in: verify_r1rho_kjaergaard_missing_r1  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * First attempt at properly implementing the target_functions.relax_fit.jacobian() function.  This is now the Jacobian of the chi-squared function.  A new jacobian_matrix data structure has been created for holding the matrix data prior to converting it into a Python list of lists.  The equation used was simply the chi-squared gradient whereby the sum over i has been dropped and the i elements are stored in the second dimension of matrix.
        * Speed up of the target_functions.relax_fit C module.  The variances are now pre-calculated in the setup() function from the errors, so that the use of the square() function is minimised.  The chi-squared equation, gradient, and Hessian functions now accept the variance rather than standard deviation argument and hence the squaring of errors has been removed.  This avoids a lot of duplicated maths operations.
        * Alphabetical ordering of global variable declarations in the target_functions.relax_fit header file.
        * Added RelaxError, if less than 2 time points is used for exponential curve fitting in R2eff.  This follows:  http://thread.gmane.org/gmane.science.nmr.relax.user/1718 http://thread.gmane.org/gmane.science.nmr.relax.user/1735  Specifically, data was attached here: http://thread.gmane.org/gmane.science.nmr.relax.user/1735/focus=1736.
        * Added system test Relax_disp.test_bug_atul_srivastava(), to catch a bug missing raising a RelaxError, since the setup points to a situation where the data shows it is exponential fitting, but only one time point is added per file.  This follows:  http://thread.gmane.org/gmane.science.nmr.relax.user/1718 http://thread.gmane.org/gmane.science.nmr.relax.user/1735  Specifically, data was attached here: http://thread.gmane.org/gmane.science.nmr.relax.user/1735/focus=1736.
        * Parameter precision lowered for Relax_disp.test_estimate_r2eff_err_auto().  This is due to change to C code.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Created the select.display user function.  This simply displays the current spin selections of all spins.  In the future it can be extended to display the interatomic data container selections, domain selections, etc.
        * Fix for system test: test_estimate_r2eff_err_auto().  The Jacobian to estimate the errors has been changed from the direct function Jacobian, to the Jacobian of the chi2 function.  This changes the R2eff error predictions, and hence parameter fitting.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented the direct Jacobian in Python, to be independent of C code in development phase.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Activated all method try in: system test Relax_disp.test_estimate_r2eff_err_methods.  This is to quickly estimate errors from all different methods.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fix to system test: test_estimate_r2eff_err_auto, which now checks the values for the direct Jacobian.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Increased the number of time points for exponential curve fitting to 3.
        * Fix to weight properly according to if minimising with direct Jacobian or chi2 Jacobian.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fix to system test test_estimate_r2eff_err_methods, after modification of weighting.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Switched in estimate_r2eff_err() to use the chi2 Jacobian from C code, and Jacobian from Python code.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Removed all references to test values which was received by wrong weighting.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Better error checking in the relaxation dispersion overfit_deselect() API method.  The model must be set for this procedure to work, and the method now checks that this is the case.
        * Better error checking for the specific_analyses.relax_disp.average_intensity() function.  This function would fail with a traceback if a peak intensity error analysis had not yet been performed.  Now it fails instead with a clean RelaxError so that the user knows what is wrong.
        * Tried implementing getting the chi2 gradient, using target_function.chi2.dchi2().  The output seem equal.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Replaced the way to calculate the chi2 Jacobian, for exponential fit in minfx.  This is only for the test class, but reuses library code.  This should make it much easier in the future to implement chi2 gradient functions to minfx, since it is only necessary to implement the direct gradient of the function, and then pass the direct gradient to chi2 library, which turn it into the chi2 gradient function which minfx use.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Moved unnecessary function in R2eff error estimate module into experimental class.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Implemented system test: test_bug_negative_intensities_cpmg, to show lack of error message to user.  Maybe these spins should be de-selected, or at least show a better warning.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * An attempt at documenting the Monte Carlo simulation verses covariance matrix error estimates.  This is for the R2eff and I0 parameters of the exponential curves.  For the Monte Carlo errors, 10000 simulations were preformed.  This means that these errors can perform as a gold standard by which to judge the covariance matrix technique.  Currently it can be seen that the relax_disp.r2eff_err_estimate user function with the chi2_jacobian flag set to True performs extremely poorly.
        * Reintroduced the original target_functions.relax_fit.jacobian() function.  The new function for the Jacobian of the chi-squared function has been renamed to target_functions.relax_fit.jacobian_chi2() so that both Python functions are accessible within the C module.
        * Epydoc fixes for the pipe_control.mol_res_spin.format_info_full() function.
        * Epydoc docstring fixes for many methods in the relaxation dispersion auto-analysis module.
        * If math domain errors are found when calculating the two point R2eff values, the point is being skipped.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Moved intensity negative value from reference to CPMG point.
        * Modified system test test_bug_negative_intensities_cpmg, to prepare for testing number of R2eff points.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Comparison of 10,000 Monte Carlo simulations to a different covariance matrix error estimate.  The covariance_matrix.py script has been duplicated and the chi2_jacobian argument of the relax_disp.r2eff_err_estimate user function has been changed from True to False.  As can be seen in the 2D Grace plots, this error estimate is incredibly different.  The R2eff errors are overestimated by a factor of 1.9555, which indicates that the Jacobian or covariance matrix formula are not yet correct.
        * The target_functions.relax_fit C module Python function jacobian_chi2() is now exposed.  This was previously not visible from within Python.
        * Added a script and log file for calculating the numerical Jacobian for an exponential curve.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the Jacobian using the numdifftools.Jacobian object construct and obtain the matrix, both at the minimum and at a point away from the minimum.  The values will be used to construct a unit test to check the C module implementation.
        * Created two unit tests showing the target_functions.relax_fit.jacobian() function is correct.  This compares the calculated Jacobian to the numerically integrated values from the test_suite/shared_data/curve_fitting/numeric_gradient/jacobian.py script.
        * Renamed the test_data/shared_data/curve_fitting/numeric_gradient/ directory to numeric_topology.  This is to better reflect that it contains numeric approximations to the gradient, Hessian, and Jacobian.
        * Added a script and log for calculating the numerical chi-squared Jacobian for an exponential curve.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the chi-squared Jacobian using the numdifftools.Jacobian object construct and obtain the matrix, both at the minimum and at a point away from the minimum.  The values will be used to construct a unit test to check the C module implementation.
        * Fix for the chi-squared Jacobian numerical approximation script.  The function was modified to that a list of chi-squared elements are returned, i.e. the sum part of the chi-squared equation has been removed.
        * Created two unit tests showing the target_functions.relax_fit.jacobian_chi2() function is correct.  This compares the calculated chi-squared Jacobian to the numerically integrated values from the test_suite/shared_data/curve_fitting/numeric_topology/jacobian_chi2.py script.
        * Added a script and log for calculating the numerical covariance matrix for an exponential curve.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the covariance matrix via the Jacobian calculated using the numdifftools.Jacobian object construct and obtain the matrix, both at the minimum and at a point away from the minimum.  The covariance is calculated as inv(J^T.W.J).
        * Added a script and log for calculating the exponential curve parameter errors via bootstrapping.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the parameter errors via bootstrapping.  As the parameters at the minimum are the exact parameter values, bootstrapping and Monte Carlo simulation converge and hence this is a true error estimate.  200,000 simulations where used, so the parameter errors are extremely accurate.
        * Modified module to estimate R2eff errors, to use the C code Jacobian.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified system test test_estimate_r2eff_err_methods, to check all Jacobian methods are correctly implemented.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added more print out information, when log(I / I_ref) is negative, and raising errors.  This can help the user track back information to the error more easily.
        * Improved system test test_bug_negative_intensities_cpmg, by counting number of R2eff points.  Spin 4, which has one negative intensity, is expected to have one less R2eff point.  This makes sure, that all CPMG data set can be loaded and analysed, even if some peaks are very weak are fluctuating with error level.
        * Fix for also storing 'r1_fit' to cdp even though it is set to False.  Bug #22541 (https://gna.org/bugs/?22541): The R1 fit flag does not work in the GUI.
        * Cleanup in GUI test Relax_disp.test_r2eff_err_estimate.  This now passes after previous commit.  Bug #22541 (https://gna.org/bugs/?22541): The R1 fit flag does not work in the GUI.
        * Added model DPL94, to be tested in GUI test Relax_disp.test_r2eff_err_estimate.  This shows that the bug is still there.  Bug #22541 (https://gna.org/bugs/?22541): The R1 fit flag does not work in the GUI.
        * Fix for system test test_estimate_r2eff_err and test_r1rho_kjaergaard_missing_r1, where r1_fit=True, needed to be send to Auto_analyses.  Bug #22541 (https://gna.org/bugs/?22541): The R1 fit flag does not work in the GUI.
        * API documentation fixes.
        * Moved multifit_covar into lib.statistics, since it is an independent module.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Moved "func_exp_grad" into experimental class for different minimisation methods.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Improved documentation to user function relax_disp.r2eff_err_estimate, and removed the possibility to use the chi2 Jacobian, as this is rubbish.  But the back-end still have this possibility, should one desire to try this.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Moved the argument 'chi2_jacobian' as the last argument in estimate_r2eff_err.  This argument is highly likely not to be used, but is kept for future testing purposes.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fix to experimental class for fitting with different methods.  After moving the function into class, 'self' should be added to the function.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fix to system test test_estimate_r2eff_err, after removing the possibility to use the chi2 Jacobian.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Fix for system test test_estimate_r2eff_err_methods.  The function was called wrong in experimental class.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Initial try write comments how to generalize the scaling of the covariance according to the reduced chi2 distribution.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * First try to make a test script for estimating efficiency on R2eff error calculations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added number of simulations to 10,000 in test script, and varied the random number of time point per simulation between 3 and 10.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * In module for estimating R2eff errors, removed "values, errors" to be send to function for gradient, since they are not used.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added Jacobian to test script, and now correctly do simulations, per R2eff points.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Improved analysing test script, with plotting.  It seems that R2eff error estimation always get the same result.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added initial dataset for test analysis.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Deleted test data set.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified data script generator, to handle a situation with fixed 5 time points, and a situations with variable number of time points.  Also modified analysis script.  It seems, this has an influence how the error estimation is performing.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added simulations that show, there is perfect agreement between Monte Carlo simulations and covariance estimation.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Inserted extra tests in system test Relax_disp.test_estimate_r2eff_err_methods to test that all values of R and i0 are positive, and the standard deviation from Monte Carlo simulations are equal.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Inserted system test Relax_disp.test_finite_value, to illustrate the return of inf from C code exponential, when R is negative.  This can be an issue, if minfx takes a wrong step when no constraints are implemented.  Bug #22552 (https://gna.org/bugs/?22552): Chi2 value returned from C code curve-fitting return 0.0 for wrong parameters -> Expected influence on Monte Carlo sim.
        * Inserted possibility for bootstrapping in system test Relax_disp.test_estimate_r2eff_err_methods.  This shows, that the bootstrapping method get the SAME estimation for R2eff errors, as the estimate_r2eff_err() function.  This must either mean, that the OLD Monte Carlo simulation was corrupted, or the creation of data in Monte Carlo simulations is corrupted.
        * Modified system test Relax_disp.verify_estimate_r2eff_err_compare_mc to include bootstrapping method.  This shows there is excellent agreement between bootstrapping and estimation of errors from covariance, while relax Monte Carlo simulations are very much different.  Boot strapping is the "-2":   Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added functionality to create peak lists, for virtual data.  This is to compare the distribution of R2eff values made by bootstrapping and Monte Carlo simulations.  Rest of the analysis will be performed in relax.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added initial peak lists to be analysed in relax for test purposes.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added relax analysis script, to profile distribution of errors drawn in relax, and from Python module "random".  It seems that relax draw a lot more narrow distribution of Intensity with errors, than Python module "random".  This has an influence on estimated parameter error.  This is a potential huge error in relax.  A possible example of a catastrophic implementation of Monte Carlo simulations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added PNG image that show that the distribution which relax makes are to narrow.  This is a potential huge flaw in implementation of Monte Carlo simulations.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Modified analysis script, to also make histogram of intensities.  This shows that the created intensities are totally off the true intensity.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Comment fix to system test Relax_disp.test_estimate_r2eff_err_methods, after the found of bug in relax.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.  Bug #22554 (https://gna.org/bugs/?22554): The distribution of intensity with errors in Monte Carlo simulations are markedly more narrow than expected.
        * Cleaned up user function for estimating R2eff errors.  Extensive tests have shown, there is a very good agreement between the covariance estimation, and Monte Carlo simulations.  This is indeed a very positive implementation.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.  Bug #22554 (https://gna.org/bugs/?22554): The distribution of intensity with errors in Monte Carlo simulations are markedly more narrow than expected.
        * Removed all junk comments from module for R2eff error estimation.  The module runs perfect as it does now.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.  Bug #22554 (https://gna.org/bugs/?22554): The distribution of intensity with errors in Monte Carlo simulations are markedly more narrow than expected.
        * Fix for inf values being returned from C code exponential function.  Values are now converted to high values.  This fixes system test Relax_disp.test_finite_value.  Example: x = np.array([np.inf, -np.inf, np.nan, -128, 128]), np.nan_to_num(x), array([  1.79769313e+308,  -1.79769313e+308,   0.00000000e+000, -1.28000000e+002,   1.28000000e+002]).  Bug #22552(https://gna.org/bugs/?22552): Chi2 value returned from C code curve-fitting return 0.0 for wrong parameters -> Expected influence on Monte Carlo sim.  Ref: http://docs.scipy.org/doc/numpy/reference/generated/numpy.nan_to_num.html.
        * Initial try to reach constrained methods in minfx through relax.  This is in system test Relax_disp.verify_estimate_r2eff_err_compare_mc()  This though not seem to be supported.
        * Allow R2eff model to reach constrained methods in minfx through relax.  This is in system test Relax_disp.verify_estimate_r2eff_err_compare_mc()  This though not seem to be supported.
        * Modified specific_analyses.relax_disp.parameters.r1_setup() to initialise the 'r1' variable.  This relates to bug #22541 (https://gna.org/bugs/?22541), the R1 fit flag does not work in the GUI.  This is a hack, as all of the dispersion analysis code assumes that all parameters are initialised.  This is a dangerous assumption that will have to be eliminated in the future.
        * The dispersion get_param_values() API method now calls the r1_setup() function.  This relates to bug #22541 (https://gna.org/bugs/?22541), the R1 fit flag does not work in the GUI.  This is to make sure that the parameters are correctly set up prior to obtaining all parameter values.  The R1 parameter is dynamic hence r1_setup() needs to be called at any point model parameters are accessed, as the R1 parameter can be turned on or off at any time with the relax_disp.r1_fit user function.
        * Yet another try to implement constrained method in verify_estimate_r2eff_err_compare_mc.
        * Another attempt to reach constrained method in minfx through relax.  I would need to specify:  l, lower bound constraint vector (l <= x <= u);  u, upper bound constraint vector (l <= x <= u);  c: user supplied constraint function;  dc: user supplied constraint gradient function.
        * Added a derivation of the R2eff/R1rho error estimate for the two-point measurement to the manual.  This is from http://thread.gmane.org/gmane.science.nmr.relax.devel/6929/focus=6993 and is for the rate uncertainty of a 2-parameter exponential curve when only two data points have been collected.  The derivation has been added to the dispersion chapter of the manual.
        * Equation fixes for the two-point exponential error derivation in the dispersion chapter of the manual.
        * Updated the minfx version numbers in the release checklist document.  The version is now 1.0.10, which has not been released yet but will contain the implementation of the log-barrier constraint algorithm gradient and Hessian.
        * Fix for the minfx version checking logic in the dep_check module.  Now newer versions of minfx will be handled.
        * Fixes for the Relax_disp.test_estimate_r2eff_err system test.  The kex parameter value checks have all been scaled by 1e-5 to allow for a meaningful floating point number comparison.  The number of significant figures have also been scaled.  This allows the test to now pass on one 64-bit GNU/Linux system.
        * Another fix for the minfx version checking in the dep_check module.  The version_comparison() function has been created to perform a proper version number comparison by stripping trailing zeros, converting the two version numbers to lists of int and comparing the lists using the Python cmp() function.  This will return -1 when the version number is too low, 0 when the versions are equal, and 1 when the version is higher than the minimum.
        * Added a button for the spectrum.error_analysis user function to the spectra list GUI element.  This is placed after the 'Add' and 'Delete' buttons.  The functionality could be improved by presetting the spectrum ID argument to anything the user has selected in the spectrum list.
        * Modified the behaviour of the spectrum.error_analysis button in the spectrum list GUI element.  Now the subset argument of this user function will be pre-set to any spectra selected in the list.
        * Improvements for the spectrum.error_analysis button in the spectrum list GUI element.  The user function is now launched as being modal so that the rest of the GUI freezes, and after the user function is executed the relax controller window is show and scrolled to the bottom.
        * Added Relax_disp system tests to black-list, if they depend on C code module.
        * Improvements for the spectrum.error_analysis button in the spectrum list GUI element.  The subset argument is set to None if no spectra are selected.
        * Loosened a value check to allow the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test to pass.  This test fails on MS Windows systems.
        * Fix for the Relax_disp.test_estimate_r2eff_err_auto system test on MS Windows systems.  One of the value checks has been loosened.
        * Python 2 vs. 3 compatibility fix for the pickle module.  This is for the estimate_errors*.py scripts in the directory test_suite/shared_data/curve_fitting/numeric_topology/.  The lib.compat.pickle module is now used to allow both Python versions to run relax.
        * Python 3 fix, the cmp(v1, v2) notation in the dep_check.version_comparison() function has been replaced with (v1 > v2) - (v1 < v2).  This allows relax to run on Python 3.
        * Python 3 fix for the lib.periodic_table module, the Python string module does not exist in Python 3.
        * Created the user_functions.uf_translation_table list.  The elements of this list are the names of user functions before and after a renaming.  The list is provided for backwards compatibility for relax scripts, though it is not used yet.
        * Converted the user_functions.uf_translation_table object to a dictionary.  This is for faster access which does not require looping.
        * The prompt UI now uses the user_functions.uf_translation_table dictionary.  The modified runcode() function will now check if the command typed by the user is a function or method call and then will raise a RelaxError if the command name is in the user_functions.uf_translation_table dictionary, telling the user that the user function has been renamed to the new name in the translation table.  This appears to have no effect in the script UI however.
        * Hack in the script UI for handling missing user functions due to it being renamed.  This script UI requires a different solution as the prompt UI.  The script is executed via the runpy Python module and there appears to be no clean way of catching each command before it is executed.  So instead, prior to executing the script, the contents of the script are read and old user functions are searched for using re.search().  The old user function name has "(" appended to it in the search so that it is sure that it is a user function call.  And the old function must have a space or newline character preceding it.


    Bugfixes:
        * MS Windows fixes to allow relax to run again.  The code for eliminating the GNU readline ^[[?1034h escape code emission on Linux systems fails on Windows as the 'TERM' environmental variable does not exist in os.environ.
        * Fix for the relaxation dispersion analysis Monte Carlo simulation printouts on clusters.  The multi-processor code was calling the print() function from the Slave_command.run() method, however this runs on the slave processor.  This has been shifted to the Results_command.run() method which runs on the master once the results have been returned via the Results_command.  Now the printout of the simulation number and cluster ID will be visible when running via OpenMPI on a cluster.
        * Bug fix for the lib.arg_check.is_num_tuple() function.  There was a typo in two of the RelaxError objects so that non-existent errors were being raised.
        * Grace string fixes for the alignment tensor parameters defined in the base parameter_object module.  This is essentially for allowing relax to run using Python 3.  All Grace '\' characters need to be escaped as '\\' in Python strings.
        * Another Python 3 fix - the string.split function no longer exists, it is now only a string method.
        * Fix for replacing reduce function.  This is a Python 3 fix, where this function has been removed.  This was reported as a necessity in thread: http://thread.gmane.org/gmane.science.nmr.relax.devel/6544
        * Fix for bug #22411 (https://gna.org/bugs/?22411), the failure in loading a Bruker DC T1 data file.  The problem was that there was an empty line with spaces.  The logic for skipping empty lines could not handle lines with just whitespace.  This has now been fixed.
        * Fix for bug #22501 (https://gna.org/bugs/?22501), "Close all analyses" raises error in the GUI.  The problem was general for all analysis types.  This used to work, but as it was not tested in the test suite, a regression occurred.
        * Fix for the return_r2eff_arrays() dispersion function for exponential curves.  This is a partial solution for bug #22461 (https://gna.org/bugs/?22461).  For the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test, there are multiple relaxation times for each data set.  For example, printing out the exp_type, frq, offset, point, ei, mi, oi, di, and relax_times data gives:  R1rho 799777399.1 118.078 431.0 0 0 0 0 [0.0, 0.04, 0.1, 0.2];  R1rho 799777399.1 118.078 651.2 0 0 0 1 [0.0, 0.04, 0.1, 0.2, 0.4].  Instead of taking the first relaxation time of 0.0, now the maximum time is taken.
        * Fix for bug #22505 (https://gna.org/bugs/?22505).  This is the failure of the structure.create_diff_tensor_pdb user function when no structural data is present.  The solution was simple - the CoM of the representation is set to the origin when no structural data is present, and the check for the presence of data removed.
        * Another fix for bug #22505 (https://gna.org/bugs/?22505).  This is the failure of the structure.create_diff_tensor_pdb user function when no structural data is present.  Now the cdp.structure data structure is checked, when present, if it contains any data using its own empty() method.
        * Fix for bug #22502 (https://gna.org/bugs/?22502).  This is the problem whereby the geometric prolate diffusion representation does not align with axis in PDB, as reported by Martin Ballaschk (https://gna.org/users/mab).  This problem was not the main prolate tensor axis, but that the geometric object needed to be rotated 90 degrees about the z-axis to bring the object and axis into the same frame.
        * Fix for time not extracted for CPMG experiments in target_function.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Fix for interpolating time points, when producing xmgrace files for CPMG experiments.  Bug #22461 (https://gna.org/bugs/?22461): NS R1rho 2-site_fit_r1 has extremely high chi2 value in system test Relax_disp.test_r1rho_kjaergaard_missing_r1.
        * Correction for catastrophic implementation of Monte Carlo simulations for exponential curve-fitting R2eff values in the dispersion analysis.  A wrong implemented "else if" statement, would add the intensity for the simulated intensity together with the original intensity.  This means that all intensity values send to minimisation would be twice as high than usually (if spectra were not replicated).  This was discovered for Monte Carlo simulations of R2eff errors in exponential fit.  This will affect all analyses using full relaxation exponential curves until now.  By pure luck, it seems that the effect of this would be that R2eff errors are half the value they should be.  A further investigation shows, that for the selected data set, this had a minimum on influence on the fitted parameters, because the chi2 value would be scaled up by a factor 4.  Bug #22554 (https://gna.org/bugs/?22554): The distribution of intensity with errors in Monte Carlo simulations are markedly more narrow than expected.  Task #7822 (https://gna.org/task/?7822): Implement user function to estimate R2eff and associated errors for exponential curve fitting.
        * Added a minfx minimum version check to the dep_check module.  This is to avoid problems such as that reported at bug #22408 (http://gna.org/bugs/?22408).



Version 3.2.3
(1 July 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.2.3

    Features:
        * Improvements for a number of GUI elements used in the user function windows.
        * The ^[[?1034h escape code should now no longer be emitted by GNU readline on Linux systems.
        * Created the very basic structure.com user function for calculating the centre of mass.  This is to simply allow an easy interface to the pipe_control.structure.mass.pipe_centre_of_mass() function.
        * Expansion of the REMARK section of the PDB file created for the internal structural object.  This is visible when using the structure.write_pdb user function, as well as the many other user functions which create PDB files.  The relax version as well as the file creation date are now recorded in the PDB file.  This extra information should be very useful.  Empty lines in the REMARK section improve the formatting.


    Changes:
        * Added proper sectioning to the release checklist document.
        * Added the upload script to the release checklist document.
        * Modified the Sequence GUI input element used for the user function list arguments.  The first column is now of fixed with when titles are supplied.  Previously when supplying titles, the width would be tiny and no text would be visible.
        * Added titles for all 3D coordinate user function arguments.  This is for the Sequence GUI input element, and affects the frame_order.average_position, n_state_model.CoM and paramag.centre user functions.
        * The compilation of the C modules now respects the user defined environment.  This is the patch from Justin (https://gna.org/users/jlec) attached to bug #22145 (https://gna.org/bugs/?22145).  It has been modified to include a comment and remove a double empty line.
        * Bug fix for the compilation of the C modules now respects the user defined environment.  The problem was that on Mac OS X (as well as other systems), that these environmental variables were not defined and hence the scons commands would all fail with a KeyError and traceback.  Now the keys in the os.environ dictionary are being searched for before they are set.
        * Fix for the wxPython link in the installation chapter of the manual.  This was pointing to the scipy website for some reason.
        * Changed the Python readline link for MS Windows in the installation chapter of the manual.  This now points to https://pypi.python.org/pypi/pyreadline as the iPython link is broken.
        * Implemented system test Relax_disp.test_bug_22146_unpacking_r2a_r2b_cluster.  This is to catch the wrong unpacking of R2A and R2B when performing a clustered full dispersion model analysis.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Extended system test Relax_disp.test_bug_22146_unpacking_r2a_r2b_cluster for B14 full model.  This is to catch the wrong unpacking of R2A and R2B when performing a clustered full dispersion model analysis.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Extended system test Relax_disp.test_bug_22146_unpacking_r2a_r2b_cluster for NS CPMG 2SITE 3D full model.  This is to catch the wrong unpacking of R2A and R2B when performing a clustered full dispersion model analysis.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Extended system test Relax_disp.test_bug_22146_unpacking_r2a_r2b_cluster for NS CPMG 2SITE STAR full model.  This is to catch the wrong unpacking of R2A and R2B when performing a clustered full dispersion model analysis.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Added synthetic data generator script which created the data to test against.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Split system test Relax_disp.test_bug_22146_unpacking_r2a_r2b_cluster up in different tests.  A setup function which is: setup_bug_22146_unpacking_r2a_r2b_cluster(self, folder=None, model_analyse=None):  And then the tests: test_bug_22146_unpacking_r2a_r2b_cluster_B14 test_bug_22146_unpacking_r2a_r2b_cluster_CR72 test_bug_22146_unpacking_r2a_r2b_cluster_NS_3D test_bug_22146_unpacking_r2a_r2b_cluster_NS_STAR.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Modified profiling script to get closer to the implementation in relax.  An additional test function is setup to figure out how to reshape the numpy arrays in the target function.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Updated profiling text for CR72 model.  Now it is tested for 3 fields.  This is related to: Task #7807 (https://gna.org/task/?7807): Speed-up of dispersion models for clustered analysis.
        * Added searching for environment variable PYTHON_INCLUDE_DIR if Python.h is not found in standard Python library.  This can be very handsome, if one has a Python virtual environment for multiple users.  This relates to the wiki page: http://wiki.nmr-relax.com/Epd_canopy.
        * The lib.compat.norm() replacement function for numpy.linalg.norm() now handles no axis argument.  This is to allow the function to be used in all cases where numpy.linalg.norm() is used, while providing compatibility with the axis argument and all numpy versions.
        * Fix for the scons target for compiling the relax manual when using a repository checkout copy.  The method for compiling the relax manual was calling the version.revision() function, however this has been replaced a while ago by the version.repo_revision variable.
        * Created two unit tests for the lib.io.file_root() function.  The second of the tests demonstrate a failure of the function if multiple file extensions are present.
        * Lowered chi2 value test in system test Relax_disp.test_bug_22146_unpacking_r2a_r2b_cluster_NS_STAR.  This is due to the data produced on 32 bit machine, and tested on 64 bit machines.  The error was: AssertionError: 2.4659455670347743e-05 != 0.0 within 7 places.  The reason for this is due to truncation artifacts.
        * Fix for wrong path testing of Python.h.  Python.h would be in PYTHON_PREFIX/include/pythonX.Y/Python.h and not in PYTHON_PREFIX/include/Python.h.
        * Better handling of the control-C keyboard interrupt signal in the relax test suite.  This includes two changes.  The Python 2.7 and higher unittest.installHandler() function is now called, when present, to terminate all tests using the unittest module control-C handler.  The second change is that the keyboard interrupt signal is caught in a try-except statement, a message printed out, and the tests terminated.  This should be an improvement for all systems.
        * Adding last profiling information for model CR72.
        * Added system test for model LM63 3-site.  According to results folder in test_suite/shared_data/dispersion/Hansen/relax_results/LM63 3-site.  This should pass, but it doesn't.
        * Created an initial Relax_disp.test_lm63_3site_synthetic system test.  This should have been set up a long time ago.  It uses the synthetic noise-free data in the test_suite/shared_data/dispersion/lm63_3site directory which was created for a system test but never converted into one.  The test still needs modifications to allow it to pass.
        * Modifications for the Relax_disp.test_lm63_3site_synthetic system test.  The r2eff_values.bz2 saved state file has been updated, as it was too old to use in the test.  The test has also had a typo bug fixed and the data pipe name updated.  The test now also checks all of the optimised values.
        * Removed system test test_hansen_cpmg_data_to_lm63_3site.  This was a temporary implementation and has been replaced with system test Relax_disp.test_lm63_3site_synthetic.
        * Fixes for all of the relaxation dispersion system tests which were failing with the new minfx code.  Due to the tuning of the log barrier constraint algorithm in minfx in the commit at http://article.gmane.org/gmane.science.mathematics.minfx.scm/25, many system tests needed to be slightly adjusted.  Two of the Relax_disp.test_tp02_data_to_* system tests were also failing as the optimisation can no longer move out of the minimum at pA = 0.5 for one spin (due to the low quality grid search in the auto-analysis).
        * Updated the release checklist document for the new 1.0.7 release of minfx.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test.  The pA parameter is no longer tested for one spin as it moves to random values on different operating systems and 32 vs. 64-bit systems.  This is because this spin experiences no exchange, both dw and kex are zero.
        * Decreased the value checking precision in the Relax_disp.test_hansen_cpmg_data_to_lm63 system test.  This is to allow the test to pass on certain operating systems and 32-bit systems.
        * Modified the precision of the output from the relax_disp.sherekhan_input user function.  This is simply to allow the Relax_disp.test_sod1wt_t25_to_sherekhan_input system test to pass on certain 32-bit systems, as the float output to 15 decimal places is not always the same.  This system test has been updated for the change.
        * Modified the Relax_disp.test_sprangers_data_to_mmq_CR72 system test to pass on certain systems.  This test fails on 32-bit Linux (and probably other systems as well).  To fix the test, the kex values are all divided by 100 before checking them to 4 decimal places of accuracy.
        * Improved how the relax installation path is determined in the status object.  If the path cannot be found, the current working directory is then checked if it is where relax is installed.  This is needed when importing modules outside of relax.
        * Hack to permanently eliminate the ^[[?1034h escape code being produced on Linux systems.  This is produced by importing the readline module.  The escape code will be sent to STDOUT every time relax is executed, so it will be present in all log files.  The problem is the TERM environmental variable being set to 'xterm'.  The hack simply sets TERM to an empty string.
        * More hacks for permanently eliminating the ^[[?1034h escape code being produced on Linux systems.  This is a nasty feature of the GNU readline library.  It is now also turned off in the dep_check module, suppressing ^[[?1034h in Python scripts which import only parts of relax.
        * Numpy version 1.6 or higher is now required to be able to run relax.  This follows from the series of messages: http://www.mail-archive.com/relax-devel@gna.org/msg06288.html, http://www.mail-archive.com/relax-devel@gna.org/msg06289.html, http://www.mail-archive.com/relax-devel@gna.org/msg06327.html, and http://www.mail-archive.com/relax-devel@gna.org/msg06335.html.  If too many users complain, maybe this change can be reverted later.  This minimal numpy version is needed for many of the speed ups going in the relaxation dispersion and frame order analyses.  It is required for the numpy ufunc out arguments and for the numpy.eigsum() function.  These will likely be used in other analyses in the future for improving the speed of relax, so it might affect users of other analyses later on.
        * Updated the numpy minimal dependency in the installation chapter of the manual to version 1.6.
        * Added better epydoc sectioning to the lib.dispersion.ns_cpmg_2site_expanded module docstring.  This is to better separate the original scripts used to document the code evolution.
        * Empty lines are now handled by the lib.structure.pdb_write.record() function.  By supplying the remark as None, empty lines can now be created in the REMARK section of a PDB file.  This can be used for nicer formatting.
        * Fixes for the Diffusion_tensor system tests due to the recent PDB file changes.  Prior to the comparison of the generated PDB files, all REMARK PDB lines are now stripped out.
        * Fixes for all system tests failing due to the expanded and improved PDB REMARK section.  The system tests now remove all REMARK records prior to comparing file contents.  The special strip_remarks() system test method has been created to simplify the stripping process.
        * Fix for the software verification tests.  The recent expansion and improvements of the REMARK records created by the internal structural object PDB writing method imported the relax version to place this information into the PDB files.  However this breaks the relax library design, as shown by the verification tests.  Instead the relax version information is being taken from the lib.structure.internal.object.RELAX_VERSION variable.  This defaults to None, however the version module now sets this variable directly when it is imported so that it is always set to the current relax version when running relax.
        * General Python 3 fixes via the 2to3 script.
        * Removed the lib.compat.sorted() function which was providing Python2.3 compatibility.  For a while now, relax has been unable to run on Python versions less than 2.5.  Therefore there is no use for having this replacement function for Python <= 2.3 which was being placed into the builtins module.
        * Python 3 fixes for the entire codebase using the 2to3 script.  The command used was: 2to3 -j 4 -w -f xrange .
        * The internal structural object add_molecule() and has_molecule() methods are now model specific.  This allows for finer control of structural object.
        * Created the new lib.structure.files module.  This currently contains the single find_pdb_files() function which will be used to find all *.pdb, *.pdb.gz and *.pdb.bz2 versions of the PDB file in a given path.
        * Fix for the breakage of the relax help system.  This was reported at http://thread.gmane.org/gmane.science.nmr.relax.devel/6481.  The problem was that the TERM environmental variable was turned off to avoid the GNU readline library on Linux systems emitting the ^[[?1034h escape code.  See the message at http://thread.gmane.org/gmane.science.nmr.relax.devel/6481/focus=6489 for more details.  However the Python help system obviously requires this environmental variable.  Now only if the TERM variable is set to 'xterm' will it be reset, and to 'linux' instead of the blank string ''.  This does not affect any relax releases.


    Bugfixes:
        * Fix for the wrong unpacking of R20A and R20B in model CR72 full.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Fix for the wrong unpacking of R20A and R20B in model B14 full.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Fix for the wrong unpacking of R20A and R20B in model NS CPMG 2SITE 3D full model.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Fix for the wrong unpacking of R20A and R20B in model NS CPMG 2SITE STAR full model.  Bug #22146: (https://gna.org/bugs/?22146) Unpacking of R2A and R2B is performed wrong for clustered "full" dispersion models.
        * Bug fix for the lib.io.file_root() function for multiple file extensions.  The function will now strip off all file extensions.
        * Fix for bug #22210 (https://gna.org/bugs/?22210), the failure of the 'LM63 3-site' dispersion model.  The problem is described in the bug report - the multiplication in the tanh() function is a mistake, it must be a division.
        * Fix for the Library.test_library_independence verification test on MS Windows.  The tearDown() method now uses the error handling test_suite.clean_up.deletion() function to remove the copied version of the relax library.
        * Fixed the packing out of parameter tex for global analysis in model IT99.  Bug #22220 (https://gna.org/bugs/?22220): Unpacking of parameters for global analysis in model IT99, is performed wrong.
        * Fix for bug #22257, the freezing of the GUI after using the free file format window on Mac OS X.  This is reported at https://gna.org/bugs/?22257.  This is a recurring problem in Mac OS X as it cannot be tested in the relax test suite.  The problem is with wxPython.  The modal dialogs, such as the free file format window, cannot be destroyed on Mac OS X using wx.Dialog.Destroy() - this kills wxPython and hence kills relax.  The problem does not exist on any other operating system.  To fix this, all wx.Dialog.Destroy() calls have been replaced with wx.Dialog.Close().



Version 3.2.2
(5 June 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.2.2

    Features:
        * Large speedups of all analytical relaxation dispersion models by converting the R2eff calculations and value error checking from single values to numpy arrays.
        * Edge cases where function failures occur are now properly handled for all analytical relaxation dispersion models.
        * Completion of the frame_order.pdb_model user function backend for the frame order PDB representation.
        * relax will now detect when files with *.gz or *.bz2 file extensions are being created and automatically gzip or bzip compress the file.


    Changes:
        * Small speed up for all the isotropic cone and pseudo-elliptic cone frame order models.  The vector length calculation for the numeric PCS integration has been simplified and shifted outside of a loop to take advantage of the speed of numpy.
        * All three file arguments for the pymol.frame_order user function are now optional.
        * Updated all the API documentation links in the dispersion chapter of the manual.  These were pointing to http://www.nmr-relax.com/api/3.1/ whereas they should now be point to http://www.nmr-relax.com/api/3.2/.
        * Modified a printout in the 'devel_scripts/code_validator' script.  This is to clarify that the first method of a class does not need two preceding empty lines.
        * Shifted some functions from lib.structure.geometric into their own modules.  The angles_regular() and angles_uniform() functions are now in the lib.structure.angles module, and the get_proton_names in lib.structure.conversion.
        * Deletion of the pipe_control.structure.main.create_cone_pdb() function.  This is only used in the frame order analysis, but has been made redundant by the lib.structure.represent.cone.cone() function.
        * Completed the frame_order.pdb_model user function backend for the frame order PDB representation.  Most of this backend, including the axes and cone representations, had been broken for quite a while and were being skipped with an early return statement.  This has now been made functional and a few fixes have been made.  For the 'rotor' and 'free rotor' model, the neg_cone argument is now ignored so that only one model is produced in the final frame order PDB representation file.  For all other models, the rotor representation is no longer centred to the point on axis closest to the centre of mass, as the pivot is unambiguously defined.  The rotor representation has also been made larger in these models so that it is outside of the cone, and the propeller blades are now staggered.
        * Modified py_type from "list" to "float_array" in uf_object type in user function dx.map.  Bug #22035: (https://gna.org/bugs/?22035) The dx.map user function is broken in the GUI.
        * Added py_type "list_val_or_list_of_list_val" to be handled in GUI uf_objects.  Bug #22035: (https://gna.org/bugs/?22035) The dx.map user function is broken in the GUI.
        * Modified the frame order constraints so that cone_theta_x <= cone_theta_y.  The linear_constraints() function docstring has been updated to include this constraint.
        * Set dim=4 when setting chi surface level in user function dx.map.
        * Fix for the n_state_model.cone_pdb user function for the recent internal structural object changes.  The cone arguments should now be called cone_obj.
        * Renamed the relax_disp.set_grid_r20_from_min_r2eff user function to relax_disp.r20_from_min_r2eff.  This follows from the proposal at http://thread.gmane.org/gmane.science.nmr.relax.devel/5957.
        * Modification to the Sequence_2D GUI element used for some user function windows.  The selection_win_show() method has been redefined, as the parent method from the Sequence element is specific for the 1D sequence module.  The open_dialog() method has also been modified to use the new selection_win_show(), as well as the parent Sequence class selection_win_data() method.
        * Created the User_functions.test_structure_rotate GUI tests.  This is to catch bug #22100 (https://gna.org/bugs/?22100), the rotation argument for the structure.rotate user function cannot be changed in the GUI, as an AttributeError is raised.
        * Moved py_type "list_val_or_list_of_list_val" to 2D sequence types.
        * Added dim dimensions to match the {x, y, z} positions for GUI input in user function dx.map.
        * Modified the User_functions.test_structure_rotate GUI test to change and check the rotation matrix.
        * Some more fixes for the User_functions.test_structure_rotate GUI test.  The open_dialog() method cannot be used, as it deletes the window at the end.  Instead the selection_win_show() and selection_win_data() method combination is used.
        * Expanded the User_functions.test_structure_rotate GUI test.  This is to more extensively check the 'float_matrix' user function argument type in the GUI.
        * Modified the dim dimensions to (None, 3) to allow the user to change number of points in the GUI.  This is for the user function dx.map.
        * Simplified the User_functions GUI tests.  The exec_uf_pipe_create() method has been created to simplify the data pipe creation in the tests.
        * Expanded the User_functions.test_structure_rotate GUI test.  The rotation matrix argument checks for the Sequence_2D GUI element have been expanded to check that setting nothing (blank element) returns nothing (None).  The other checks have also been slightly modified.
        * Expanded the User_functions.test_structure_rotate GUI test to catch more problems.  Now the rotation matrix value in the user function window is set to a series of invalid values to test if the Sequence_2D GUI element will handle the rubbish input.  This is to mimic user errors.
        * Created the is_list() and is_list_of_lists() functions for the lib.check_types module.
        * Clean up of the User_functions.test_structure_rotate GUI test.  The invalid value check is simpler and the Sequence_2D GUI object return value is now checked to be None.
        * Expanded the User_functions.test_structure_rotate GUI once more.  This time the setting of invalid values in the Sequence_2D element itself is now checked.  For example for the rotation matrix of the structure.rotate user function, if a matrix element is set to a string, a NameError is raised.
        * Created the User_functions.test_dx_map GUI test.  This extensively checks the 'point' argument for the dx.map user function GUI window.  This is to catch bug #22102 (https://gna.org/bugs/?22102), the point argument of the dx.map user function being incorrect in the GUI.
        * Modified the User_functions.test_dx_map GUI test to catch another problem with the Sequence_2D element.
        * Fixes for the frame order PDB presentation in the frame_order.pdb_model user function backend.
        * Expanded the User_functions.test_dx_map GUI test once again.  The new test is to set 2 valid points in the wizard, open and close the Sequence_2D window (twice), and check that the points come back.
        * Increased the width of the first column of the Sequence_2D GUI element for variable lists.  This is so the column title "Number" will fit.
        * Added list titles for the dx.map user function point argument.  This is so that the Sequence_2D GUI element will have column titles of 'X coordinate', 'Y coordinate', and 'Z coordinate'.
        * The self.variable_length flag is now used throughout the Sequence GUI element.
        * The self.variable_length flag is used in one more spot in the Sequence_2D GUI element.
        * Created the User_functions.test_structure_add_atom GUI test.  This is used to check the operation of the Sequence GUI element via the 'pos' argument of the structure.add_atom user function.  This is a list fixed to 3 elements.
        * Titles are now handled and set in the Sequence GUI element.  The titles will replace the numbering of 1 onwards in the first column of the GUI element.
        * Small fix for switched indices in the new User_functions.test_structure_add_atom GUI test.
        * Modified the 'pos' argument of the structure.add_atom user function.  The argument is now a list of fixed length of 3, and it has the titles 'X coordinate', 'Y coordinate', and 'Z coordinate' which are shown in the GUI.
        * Created the User_functions.test_spectrum_read_intensities GUI test to catch bug #22105.  This is reported at https://gna.org/bugs/?22105.  The problem is that a single file name is split up into many files when the file selection button is clicked, one for each character of the file name.
        * Fix for the User_functions.test_spectrum_read_intensities GUI test.  A valid value was being checked as invalid.
        * Shifted all wildcards used in GUI file selection dialogs into the new user_functions.wildcard module.  These have now all been standardised, and expanded to include more capitalisation combinations and to include more *.* options.
        * Created a file selection wildcard for use in the GUI for selecting peak lists.  This is used in the four user functions which read peak lists.
        * Changed all *.* GUI file selection wildcards to *.
        * Huge speedup for model CR72.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  The system test Relax_disp.test_cpmg_synthetic_cr72_full_noise_cluster changes from 7 seconds to 4.5 seconds.  This is won by not checking single values in the R2eff array for math domain errors, but calculating all steps, and in one single round check for finite values.  If just one non-finite value is found, the whole array is returned with a large penalty of 1e100.  This makes all calculations be the fastest numpy array way.
        * Fix for system test test_cpmg_synthetic_dx_map_points.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Critical fixes for system test Relax_disp.test_hansen_cpmg_data_missing_auto_analysis.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  It is suspected that when relax have touched boundary values which made math domain errors, the error catching have created local minima or interfered with the simplex search algorithm.
        * Speedup of model TSMFK01.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is won by not checking single values in the R2eff array for math domain errors, but calculating all steps, and in one single round check for finite values.  If just one non-finite value is found, the whole array is returned with a large penalty of 1e100.  This makes all calculations be the fastest numpy array way.
        * Huge speedup of model B14.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  Time test for system tests:  test_baldwin_synthetic 2.626s -> 1.990s, test_baldwin_synthetic_full 18.326s -> 13.742s.  This is won by not checking single values in the R2eff array for math domain errors, but calculating all steps, and in one single round check for finite values.  If just one non-finite value is found, the whole array is returned with a large penalty of 1e100.  This makes all calculations be the fastest numpy array way.
        * Speedup of model TP02.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  The change for running system test is: test_curve_type_r1rho_fixed_time 0.057s -> 0.049s, test_tp02_data_to_ns_r1rho_2site 10.539s -> 10.456s, test_tp02_data_to_tp02 8.608s -> 5.727s.  This is won by not checking single values in the R1rho array for math domain errors, but calculating all steps, and in one single round check for finite values.  If just one non-finite value is found, the whole array is returned with a large penalty of 1e100.  This makes all calculations be the fastest numpy array way.
        * Huge speedup for model TAP03.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  The change for running system test is: test_tp02_data_to_tap03 13.869s -> 7.263s.  This is won by not checking single values in the R1rho array for math domain errors, but calculating all steps, and in one single round check for finite values.  If just one non-finite value is found, the whole array is returned with a large penalty of 1e100.  This makes all calculations be the fastest numpy array way.
        * Speedup of model MP05.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  The change in system test is:  test_tp02_data_to_mp05 10.750s -> 6.644s.
        * Speedup of model MMQ CR72.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  Change in system test: test_sprangers_data_to_mmq_CR72 9.892s -> 4.121s.
        * Speedup for model M61.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  Change in speed is: test_m61_data_to_m61 6.692s -> 3.480s.
        * Speedup of model LM63.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  Change in system test was: test_hansen_cpmg_data_auto_analysis 13.731s -> 9.971s, test_hansen_cpmg_data_auto_analysis_r2eff 13.370s -> 9.510s, test_hansen_cpmg_data_to_lm63 3.254s -> 2.080s.
        * Speedup of model IT99.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  Change in speed is: test_hansen_cpmg_data_auto_analysis 9.74s -> 8.330s, test_hansen_cpmg_data_to_it99 4.928s -> 3.138s.
        * Speedup of model DPL94.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  Change in speed is:  test_dpl94_data_to_dpl94 19.412s -> 4.427s.
        * Math-domain catching for model B14.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model CR72.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model: 'NS CPMG 2-site expanded'.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model CR72.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  The skipping of test when num_points > 0, is a bad implementation.  If such a case should show, it is best to catch the wrong input for the calculations.  This is best done with a check before running the calculations.
        * Math-domain catching for model TSMFK01.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model TP02.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model TAP03.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model DPL94.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model TAP03.  Another check for division with 0 inserted.
        * Math-domain catching for model MP05.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model IT99.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Removed class object "back_calc" being updated per time point for model LM63.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model M61.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Math-domain catching for model MMQ CR72.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Align math-domain catching for model CR72 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model DPL94 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model IT99 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model LM63 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model M61 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model MP05 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model TAP03 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model TP02 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Align math-domain catching for model TSMFK01 with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Removing unnecessary math-domain catching for model IT99.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  The denominator is always positive.
        * Align math-domain catching for model NS CPMG 2-site expanded with trunk implementation.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of errors have to be more careful.
        * Modified unit tests demonstrating edge case 'no Rex' failures of the model 'NS CPMG 2-site expanded'.  This is to align with the current return of data in the disp_speed branch.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0.
        * Added 7 unit tests demonstrating edge case 'no Rex' failures of the model 'DPL94'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0.
        * Unit test _lib/test_ns_cpmg_2site_expanded.py copied to _/test_lm63.py.  They are both of CPMG type.
        * Added 7 unit tests demonstrating edge case 'no Rex' failures of the model 'LM63'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0.
        * Unit test _lib/_dispersion/test_ns_cpmg_2site_expanded.py copied to _lib/_dispersion/b14.py.  They are both of CPMG type, and can be re-used.
        * Added 7 unit tests demonstrating edge case 'no Rex' failures of the model 'B14'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0.
        * Removed unnecessary math domain checking in model B14.  They are slowing down the code.  There is now protection for edge cases, and a last final check, before returning values.  That should be sufficient.
        * Unit test _lib/_dispersion/test_b14.py copied to _lib/_dispersion/test_CR72.py.  They are both of CPMG type, and can be re-used.
        * Copied unit test  _lib/_dispersion/* to be reused for other models.
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'CR72'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e5.
        * Added the 8th unit tests demonstrating edge case 'no Rex' failures of the model 'B14'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e5.
        * Added the 8th unit tests demonstrating edge case 'no Rex' failures of the model 'LM63'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e20.
        * Small fix for 8 unit tests demonstrating edge case 'no Rex' failures of the model 'ns cpmg_2site_expanded'.  The comparison of R2eff is now divided into a special case for kex having large values.
        * Deleted unit test case for lm63 3site.
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'M61'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e20.
        * Added the 8th unit tests demonstrating edge case 'no Rex' failures of the model 'DPL94'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange:
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'M61b'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e20.
        * Math-domain catching for model M61b.  Task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These can be found via the --numpy-raise function to the system tests.  To make the code look clean, the class object "back_calc" is no longer being updated per time point, but is updated in the relax_disp target function in one go.
        * Modified script to be able to run system test Relax_disp.xxx_test_m61b_data_to_m61b.
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'IT99'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e19.
        * Added 9 unit tests demonstrating edge case 'no Rex' failures of the model 'MMQ CR72'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e5; dwH = 0.0.
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'MP05'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e20.
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'TAP03'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e20.
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'TP02'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e20.
        * Added 7 unit tests demonstrating edge case 'no Rex' failures of the model 'TSMFK01'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0.
        * Copied unit test test_b14.py to test_ns_cpmg_2site_3d.py.
        * Added 8 unit tests demonstrating edge case 'no Rex' failures of the model 'NS CPMG 2-site 3D'.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e7.
        * Modified unit tests demonstrating edge cases 'no Rex' failures of the model 'TP02'.  The catching of errors for off-resonance R1rho models was implemented wrong.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938.  This is to implement catching of math domain errors, before they occur.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0; kex = 1e5.
        * Critical fix for the math domain catching of model TP02.  The catching of errors for off-resonance R1rho models was implemented wrong.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938.
        * Modified unit tests demonstrating edge cases 'no Rex' failures of the model 'DPL94'.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938.
        * Modified unit tests demonstrating edge cases 'no Rex' failures of the model 'MP05'.  The catching of errors for off-resonance R1rho models was implemented wrong.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.
        * Critical fix for the math domain catching of model MP05.  The catching of errors for off-resonance R1rho models was implemented wrong.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938.
        * Modified unit tests demonstrating edge cases 'no Rex' failures of the model 'TAP03'.  The catching of errors for off-resonance R1rho models was implemented wrong.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938.  And post http://article.gmane.org/gmane.science.nmr.relax.devel/5944.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Critical fix for the math domain catching of model TAP03.  The catching of errors for off-resonance R1rho models was implemented wrong.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5938.  And post http://article.gmane.org/gmane.science.nmr.relax.devel/5944.
        * Modified unit tests demonstrating edge cases 'no Rex' failures of the model 'MMQ CR72'.  This was pointed out in post http://article.gmane.org/gmane.science.nmr.relax.devel/5940.  And in post http://article.gmane.org/gmane.science.nmr.relax.devel/5946.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Small fix for the math domain catching of model MMQ CR72.  This was pointed out in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5940.  And in post http://article.gmane.org/gmane.science.nmr.relax.devel/5946.
        * Various spacing fixes in unit test files _lib/_dispersion.  This is the preparation for merging back disp_speed branch into trunk.  This follows post http://article.gmane.org/gmane.science.nmr.relax.devel/5948.  Usin the code validator script './devel_scripts/code_validator'.
        * Modified that unit tests having different r20a and r20b values is checking if the correct one is returned.  This is the preparation for merging back disp_speed branch into trunk.  This follows post http://article.gmane.org/gmane.science.nmr.relax.devel/5948.
        * Modified unit test to have standard population of pA = 0.95, and a correctly calculation of dw in ppm to rad/s.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Small fix in parameter calculation in unit test _dispersion/test_ns_cpmg_2site_expanded.
        * Increased max kex to value 1e18 for unit test of lin/ns_cpmg_2site_expanded.py.
        * Increased max kex to value 1e20 for unit test of lib/ns_cpmg_2site_3d.py.
        * Fix for looking for negative values, when all values where converted to positive in matrix in ns_cpmg_2site_3d.py.  This is to implement catching of math domain errors, before they occur.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Removed nested looping of returning back_calc in lib/ns_cpmg_2site_3d.
        * Removed the 8th unit test for model NS CPMG 2-site 3D.  This was the catching of errors when kex = 1e20.  The model cannot handle this situations, and we need to let it fail.
        * Removed the 8th unit test for model NS CPMG 2-site extended.  This was the catching of errors when kex has high values.  The model cannot handle this situations, and we need to let it fail.
        * Fix for differences in system tests which are different from trunk.  These were found with the command: diff -bur disp_speed/test_suite/ relax_trunk/test_suite/ | grep -v "Binary files" > diff.txt.
        * Converting back to having back_calc as a function argument to model B14.  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model CR72:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model DPL94:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model IT99:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model LM63:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model M61:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model M61b:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model MMQ CR72:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model MP05:  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model NS CPMG 2-site expanded.  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model TAP03.  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model TP02.  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Converting back to having back_calc as a function argument to model TSMFK01.  This is to clean up the API.  There can be bo no partial measures/implementations in the relax trunk.  The problem is, that many numerical models can't be optimised further, since they evolve the spin-magnetisation in a matrix.  That spin evolution can't be put into a larger numpy array.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.
        * Created the lib.compat.norm() compatibility function for numpy.linalg.norm().  For numpy 1.8 and higher, the numpy.linalg.norm() function has introduced the 'axis' argument.  This is an incredibly fast way of determining the norm of an array of vectors.  This is used by the frame order analysis.  However for older numpy versions, this causes the frame order analysis, and many corresponding system and GUI tests to fail.  Therefore this new lib.compat.norm() function has been designed to default to numpy.linalg.norm() if the axis argument is supported, or to switch to the much slower numpy.apply_along_axis(numpy.linalg.norm, axis, x) call which is supported by older numpy.
        * The frame order analysis now uses the lib.compat.norm() replacement for numpy.linalg.norm().  This is to allow for the axis argument on numpy versions before version 1.8, though these older versions will result in slower optimisation of the frame order models.
        * The built in Python range() function is no longer being replaced by xrange().  Replacing builtin.range() with builtin.xrange() on Python 2 was causing problems with Python site-packages which were not Python 3 compliant.  This includes old numpy versions.  The original overwriting of range() with xrange() was for both speed and memory conservation.  However profiling the system tests, the time for all tests did not change significantly.  This change may cause problems in certain places in relax on memory constrained computer systems, so it may need to be reverted in the future.
        * The lib.io.open_write_file() function now automatically determines the compression type.  This is used by many user functions which create files.  The end result for a user is that if they supply a '.gz' or '.bz2' file extension, a gzipped or bzipped file will be produced.
        * Removal of the docstring text wrapping in the lib.io module.
        * Expanded and improved the docstring for the relax_disp.r20_from_min_r2eff user function.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/5957.  The documentation now covers a number of the uses for this user function.  The text has also been lightly edited.  To fit all the text into the GUI user function window, the size of the dialog and the text high settings have been changed.
        * Large improvements for the detection of cross-compilation on Mac OS X systems.  The tests for different architecture support now follows the ideas discussed in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/5785/focus=5820.  In summary, for each architecture a simple C file is created, compiled with 'gcc -arch xyz', and the resultant binary file tested.  To support 64-bit compilation on 32-bit systems, all previously successful architectures are also included in the gcc command.  The change allows the 'ppc64' architecture to be reintroduced.
        * Fixed the docstring for the det_arch() method of the sconstruct script.  This is for the true cross-compilation detection on Mac OS X.


    Bugfixes:
        * Fix for the lib.geometry.lines.closest_point_ax() function for when the two points are the same.  If the point on the line and point in the 3D space are the same, then this function used to return an array of NaN values.  This situation is now caught and the point in the 3D space is returned.
        * Fix for the heterogen section of the internal structural object write_pdb() method.  A number of checks were performed to see if the PDB heterogen records were the same for all structures, but this is meaningless as the structures can of course be different.
        * Fixes for the lib.structure.represent.cone module.  The function arguments named 'cone' have been renamed to 'cone_obj' so that they do not clash with the cone() function in the module namespace.
        * Fix for the lib.structure.geometric.generate_vector_residues() function.  The atom numbers are no longer read from the internal structural object, as these are not reliable.  If another geometric representation exists in the object, then the atom numbers could be None.  Or loading structures from multiple PDB files can cause the numbering to be repeated or out of order.
        * Fix for the frame_order.pdb_model user function for the rotor models.  The rotor axis is no longer defined by spherical angles and therefore needs to be recreated using the create_rotor_axis_alpha() rather than create_rotor_axis_spherical() function from lib.frame_order.rotor_axis.
        * Partial fix for bug #22100.  This is the bug report at https://gna.org/bugs/?22100, the rotation argument for the structure.rotate user function cannot be changed in the GUI, as an AttributeError is raised.  The append_row() method call has been replaced by the correct add_element() call.
        * Bug fix for the Sequence_2D GUI element.  This is used for the user function windows in the GUI for setting lists of lists or matrices.  The GUI element GetValue() method will now return None if nothing is set.  This prevents a list of lists of None being added to the main user function window.
        * Fixes for the Sequence and Sequence_2D GUI elements for handling invalid input data.  These elements used by the user function windows previously raised all sorts of errors if the data was not what they expected (lists or lists of lists respectively).  These situations are now caught and the input data is ignored, so blank Sequence and Sequence_2D elements are presented to the user.
        * Bug fix for the Sequence_2D GUI element.  This is used for handling list of lists user function arguments in the user function GUI windows.  The setting of invalid values directly in the Sequence_2D GUI element is now detected.  These values are now replaced with None.
        * Fix for bug #22102, the point argument of the dx.map user function failing in the GUI.  This is reported at https://gna.org/bugs/?22102.  The Sequence_2D GUI element used for all list of lists arguments in the user function GUI windows now correctly handles variable length lists.  The first column which shows a count of the elements is now properly taken into account in the SetValue(), GetValue() and add_item() methods, via a new self.offset variable.  The self.variable_length variable has also been fixed so it is not overwritten by the parent Sequence GUI element.
        * Bug fixes for the Sequence GUI element used for lists in the user function windows.  Invalid values input into the Sequence GUI window are now ignored rather than raising different types of error.  And invalid input lists for fixed dimension arguments are also ignored.  This allows the User_functions.test_structure_add_atom GUI test to pass.
        * Bug fix for the lib.arg_check.is_float_object() function.  The dim argument can sometimes be an integer rather than a tuple, but this was not handled by the function.  Now integer dim arguments are pre-converted to lists before performing all the checks.
        * Fix for bug #22105 (https://gna.org/bugs/?22105).  This is the failure spectrum.read_intensities GUI user function whereby a file name is turned into lists of characters.  A few changes were made to allow the Selector_file_multiple GUI element to operate correctly.
        * Critical fix for the math domain catching of model LM63.  This was discovered with the added 7 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.
        * Critical fix for the math domain catching of model B14.  This was discovered with the added 7 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.
        * Critical fix for the math domain catching of model CR72.  This was discovered with the added 8 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  When kex is large, e.g. kex = 1e5, the values of etapos = eta_scale * sqrt(Psi + sqrt_psi2_zeta2) / cpmg_frqs  will exceed possible numerical representation.  The catching of these occurrences needed to be re-written.
        * Critical fix for the math domain catching of model B14.  This was discovered with the added 8 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  When kex is large, e.g. kex = 1e5, "nan" values where produced, which were replaced with 1e100.  The catching of these occurrences needed to be re-written.
        * Critical fix for the math domain catching of model CR72.  Removed the test for kex >= 1.e5.  This catching should rather be performed on the math functions instead.
        * Critical fix for the math domain catching of model B14.  Removed the test for kex >= 1.e5.  This catching should rather be performed on the math functions instead.  In this case, it is the catching of sinh(), not evaluating values above 710.
        * Critical fix for the math domain catching of model MMQ CR72.  This was discovered with the added 9 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.
        * Critical fix for the math domain catching of model IT99.  This was discovered with the added 8 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of these occurrences needed to be re-written.
        * Critical fix for the math domain catching of model TAP03.  This was discovered with the added 8 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.
        * Critical fix for the math domain catching of model TP02.  This was discovered with the added 8 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.
        * Critical fix for the math domain catching of model TSMFK01.  This was discovered with the added 8 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.  The catching of these occurrences needed to be re-written.
        * Critical fix for the math domain catching of model NS CPMG 2-site 3D.  This was discovered with the added 8 unit tests demonstrating edge case 'no Rex' failures.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  This is related to task #7793: (https://gna.org/task/?7793) Speedup of dispersion models.  This is to implement catching of math domain errors, before they occur.
        * Fix for bug #22112 (http://gna.org/bugs/?22112).  This is the GUI failure when setting list values via the sequence windows, launched from user function windows fails on Mac OS X.  The problem was two fold.  First the Sequence and Sequence_2D windows from wx.Dialog should not be terminated via the Destroy() method, as wx.Dialog.Destroy() appears to be horribly broken on Macs.
        * Another fix for bug #22112 (http://gna.org/bugs/?22112).  This is the GUI failure when setting list values via the sequence windows, launched from user function windows fails on Mac OS X.  This change is for the multiple file selection window and matches the previous change by replacing the Mac OS X fatal wx.Dialog.Destroy() call with wx.Dialog.Close().
        * Fix for the relax start up detection of missing Python packages.  The dep_check module is now imported first, as it used to be.  This is required to check if all required modules are installed and to present understandable messages to the user rather than cryptic ImportError messages with tracebacks.
        * Fix for bug #22033, the inability to use other optimisation algorithms in the dispersion analysis.  This is reported at https://gna.org/bugs/?22033.  As mentioned in comment #2, the solution is to raise a RelaxError explaining that only 'simplex' optimisation is possible for the dispersion analysis as the gradients are not derived and implemented in relax.



Version 3.2.1
(23 May 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.2.1

    Features:
        N/A


    Changes:
        * Punctuation fixes throughout the CHANGES document.
        * Modified system test Relax_disp.test_cpmg_synthetic_ns3d_to_cr72 to catch bug #22017: (https://gna.org/bugs/?22017) LinAlgError, for all numerical CPMG models.  System test was renamed from test_cpmg_synthetic_cr72 to test_cpmg_synthetic_ns3d_to_cr72, to reflect which model create the data and which model fits the data.
        * Modified cpmg_synthetic script to first create all time structures before doing back-calculation.  Bug #22017: (https://gna.org/bugs/?22017) LinAlgError, for all numerical CPMG models.  The numerical models need all time points which are defined in setup to be present when calculating.
        * Renamed system test to test_cpmg_synthetic_ns3d_to_cr72_noise_cluster.  The model that creates the data has been changed to numerical model.  Bug #22017: (https://gna.org/bugs/?22017) LinAlgError, for all numerical CPMG models.
        * Implemented system test Relax_disp.test_cpmg_synthetic_ns3d_to_b14.  Bug #22021: (https://gna.org/bugs/?22021) model B14 shows bad fitting to data.  This is to catch model B14 showing bad fitting behaviour.
        * Parameter precision increase for system test Relax_disp.test_baldwin_synthetic.  The correct implementation of the trigonometric functions allow for higher precision.  Bug #22021: (https://gna.org/bugs/?22021) model B14 shows bad fitting to data.  Duplicate line codes were also removed.
        * Code cleanup in system test Relax_disp.test_baldwin_synthetic_full.  Bug #22021: (https://gna.org/bugs/?22021) model B14 shows bad fitting to data.  The precision could also be increased by 1 digit.
        * Code cleanup in system test Relax_disp.test_baldwin_synthetic.  Bug #22021: (https://gna.org/bugs/?22021) model B14 shows bad fitting to data.  Removing many unnecessary lines of code.
        * Added 7 unit tests demonstrating edge case 'no Rex' failures of the 'NS CPMG 2-site expanded' model.  This follows from the ideas in the post http://article.gmane.org/gmane.science.nmr.relax.devel/5858.  These tests cover all parameter value combinations which result in no exchange: dw = 0.0; pA = 1.0; kex = 0.0; dw = 0.0 and pA = 1.0; dw = 0.0 and kex = 0.0; pA = 1.0 and kex = 0.0; dw = 0.0, pA = 1.0, and kex = 0.0.  Such tests should be replicated for all dispersion models.
        * Created the Structure.test_bug_22069_structure_delete_helix_attribute system test.  This is to catch bug #22069 (https://gna.org/bugs/?22069), the failure of the structure.delete user function with "AttributeError: Internal instance has no attribute 'helices'".
        * Created the Structure.test_bug_22070_structure_superimpose_after_deletion system test.  This is to catch bug #22070 (https://gna.org/bugs/?22070), the failure of the structure.superimpose user function after deleting atoms with structure.delete.
        * Added some checks to the Structure.test_bug_22070_structure_superimpose_after_deletion system test.  These tests reveal the real problem - that the atoms of the second model have not been removed by the structure.delete user function.
        * Added git-svn support for the relax version information module.  This allows the subversion revision number and repository URL to be displayed on program startup, so that it is stored in log files.  This is very useful for debugging purposes.
        * Improvements for the git-svn support in the relax version module.  Python 3 is now correctly handled and the URL is properly extracted from the git repository.
        * Improvement for the unit test printouts when run with the --time command line option.  The full unit test name is now printed out, reverting to the old behaviour.  However the shortened test names are preserved for the other test suite categories.
        * Created the test_ns_cpmg_2site_expanded_no_rex8() relaxation dispersion unit test.  This is a demonstration, showing the 'NS CPMG 2-site expanded' model with no exchange when kex = 1e5.  I.e. when the motion is too fast for exchange to be observed.  This test should be used for all dispersion models to make sure that they model this edge case correctly as well.  This follows from http://article.gmane.org/gmane.science.nmr.relax.devel/5906.
        * Attempt at fixing bug #22071, the relax unit test and system test not functioning.  This is reported at https://gna.org/bugs/?22071.  The fix here is that the git commands to show the current subversion revision number only works when run from the relax base directory, or one of the subdirectories.  This should now be fixed, as the pipe running the command will first 'cd' to the relax base directory.
        * Another attempt at fixing bug #22071, the relax unit test and system test not functioning.  This is reported at https://gna.org/bugs/?22071.  This time the complicated shell command "cd %s; git svn find-rev $(git rev-parse HEAD)" has been replaced with "cd %s; git svn info".
        * Changed most default dispersion parameter values to avoid edge cases where there is no exchange.  The dw parameters were all 0.0 and kex 1e5, both of which result in no exchange.  If this is ever used for an optimisation starting point - which it never should, apart from development, test suite, and debugging purposes - then the optimisation algorithm will have a very hard time recovering.  The pA parameter has been changed to 0.90 to set it to a reasonable value while still staying far away from the no exchange condition of pA = 1.0.  This follows from http://article.gmane.org/gmane.science.nmr.relax.devel/5917.
        * Fixes for 3 dispersion system tests for the change in default parameter values.  The default values are used in the auto-analysis in the test suite to avoid the grid search.  The changed values affected the optimisation of two spins from Flemming Hansen's data located at test_suite/shared_data/dispersion/Hansen/, residue 4 used as an example of no exchange and residue 70 used as an example where data is only available at one field.  The system test Relax_disp.test_set_grid_r20_from_min_r2eff_cpmg was also modified as it was directly checking these default values.
        * Fix for the Relax_disp.test_cpmg_synthetic_dx_map_points system test.  This uses the default parameter values to start the optimisation, therefore the recent change away from edge case 'no Rex' values allows the parameter values stored in ds.dx_clust_val to be correctly optimised.
        * Speed up for the version module when using a repository copy of the code.  The repository revision and URL and now stored as module variables, so that the 'svn info' and 'git svn info' commands are only run twice, once for the revision() function and once for the url() function.
        * Large speed up for the relax start up times for svn and git-svn copies of the relax repository.  The 'svn info' and 'git svn info' commands are now only executed once when the version module is first imported.  The revision() and url() functions have been merged into the repo_info() function and this is called when the module is imported.  This repo_info() function stores the repository revision and URL as the version.repo_revision and version.repo_url module variables.  It also catches if these variables are already set, so that multiple imports of the module do not cause the repository information to be looked up each time.  Previously the revision() and url() functions where called every time a relax state or result file was created, hence for repository copies the 'svn info' or 'git svn info' commands were being called each time.  The functions were also called for each interpreter object instantiated, and for each import of the version module.


    Bugfixes:
        * Extremely important fix for the model B14.  This was discovered by author Andrew Baldwin by inspecting his code in relax.  Bug #22021: (https://gna.org/bugs/?22021) model B14 shows bad fitting to data.  The implementation was performed wrong for calculation of g3 and g4.  The implementations should be performed by trigonometric functions.  The model B14 was previously in a state of non-functioning.  The B14 model now shows excellent performance.
        * Fix for bug #22069 by only deleting helix and sheet data with structure.delete when it exists.  This is bug #22069 (https://gna.org/bugs/?22069), the failure of the structure.delete user function with "AttributeError: Internal instance has no attribute 'helices'".
        * Fix for all edge case 'no Rex' failures of the 'NS CPMG 2-site expanded' model.  This uses the no exchange checking idea, modified to function in the relax trunk, from http://article.gmane.org/gmane.science.nmr.relax.devel/5847.  This is importantly on line 1 of the function.  The recently introduced set of 7 unit tests comprehensively showing these failures now all pass.
        * Important bug fix for the structure.delete user function when multiple models are present.  This is to fix bug #22070 (https://gna.org/bugs/?22070), the failure of the structure.superimpose user function after deleting atoms with structure.delete.  The problem is that structure.delete was removing the atoms from the first model but none of the others.  This is because it was using the structural object atom_loop() method to find the atoms to be deleted, but this method operates on the first model.  So when the second model is reached, the atoms are already gone.



Version 3.2.0
(20 May 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.2.0

    Features:
        * Addition of the vector_angle() relax library function for calculating the signed or directional angle between two vectors.
        * Huge speed up of the interatom.define user function.
        * For improved feedback, a busy cursor is shown in the GUI when executing user functions.
        * The steady-state NOE auto-analysis now produces a 2D Grace plot of the reference and saturated spectra peak intensity values.
        * Complete redesign of the specific analyses backend, simplifying and cleaning up this internal API and making it easier for users to add completely new analysis types to relax.
        * Parametric reduction of the rotor frame order model, eliminating one redundant parameter hence simplifying optimisation.
        * Large improvement for the lib.software.grace module.  The '*_err' and '*_bc' parameter names for the parameter error and back-calculated parameters respectively are now supported, allowing these values to be easily plotted.
        * Expansion of the value.set user function to handle parameters which consist of lists of values.  The index argument has been added to allow the index of the list to be specified, and this is then propagated into the specific analysis API.
        * Improvements for the parameter definitions in all analysis types.  This allows for better output in 2D plots and text files.
        * Implemented linear constraints for the frame order analysis.  This uses the log-barrier constraint algorithm in the minfx library https://gna.org/projects/minfx/ to provide constraints without requiring gradients.
        * Improved and expanded the relax command line options for debugging.
        * Full independence of the relax library so that it can be used outside of relax.
        * The addition of a relaxation dispersion user function for setting the R20 values to the minimum R2eff value.
        * Expanded capabilities for the relax_disp.sherekhan_input user function.
        * Implementation of the "B14" and "B14 full" relaxation dispersion CPMG models for 2-site exchange for all time scales (from the new Baldwin 2014 paper at http://dx.doi.org/10.1016/j.jmr.2014.02.023).
        * Large improvements to the relax HTML manual at http://www.nmr-relax.com/manual/index.html including fixes for URLs, bibliography entries, links, and tables.
        * Support for multiple point creation for the OpenDX chi-squared space mapping user function.
        * Automatic determination of reasonable initial contour levels for the OpenDX mapping user function.
        * Addition of a new chapter to the manual for the N-state model or ensemble analysis.
        * Creation of the new pymol.frame_order user function for visualising results.
        * Expansion of the Grace 2D data plotting capabilities.


    Changes:
        * Shifted two functions from pipe_control.angles into the new lib.geometry.angles module.  This is the fold_spherical_angles() and wrap_angles() functions which are not related to the relax data store and hence can be made independent.
        * Replaced function atan(omega1 / Delta_omega) with atan2(omega1 , Delta_omega), to make sure returned theta values are between 0 and pi.  This was done in the function return_offset_data() in the specific_analyses of relax_disp.  This was discussed in: http://thread.gmane.org/gmane.science.nmr.relax.devel/5210.
        * Changed a unit test and system test, where a change from the atan to atan2 function to calculate theta can give differences to the 15 decimal.
        * Replaced how a global analysis average results from a previous run to instead take the median.  This is to prevent averaging extreme outliers, and instead take the median of the previous result.  This was discussed in: https://mail.gna.org/public/relax-devel/2013-10/msg00009.html.
        * Modified system test Relax_disp.test_r1rho_kjaergaard to use input guess values of phi_ex in units of ppm^2 instead of rad^2/s^2.
        * Small change to system test Relax_disp.test_r1rho_kjaergaard.  The outcome of kex from system test is in the area of 4-5000.  The expected value is 13000.  A deeer analysis of the input is needed, to judge what is the correct value.
        * Created the Structure.test_bug_21814_pdb_no_80_space_padding system test.  This is for catching bug #21814 (https://gna.org/bugs/?21814), the PDB reading failure when the PDB records are not padded to 80 spaces.  The PDB file used for the test is the same file as attached to the bug report.
        * The verbosity flag is now used in the centre of mass calculations.  The pipe_control.structure.mass.pipe_centre_of_mass() function now passes the verbosity argument into the lib.structure.mass.centre_of_mass() function.
        * Created the new vector_angle() library function.  This is located in the lib.geometry.vectors module.  The function will calculate the angle between two vectors with sign or direction using the atan2() function.
        * Addition of a number of unit tests for the new lib.geometry.vectors.vector_angle() function.
        * Changes to the lib.geometry.vectors.vector_angle() function.  This now expects the normal of the plane in which the angle is defined.  The original logic was not functional, therefore the angle is forced to be negative if the cross product between the two vectors points in the opposite direction as the normal.
        * Improvements for the log converter script.  This is for the script used to convert SVN messages into a format for the relax release announcement.  The script now handles spacing better.  Multi-line messages are now concatenated into a single line using a double space between separate sentences and a single space in all other cases.
        * Improvements for the pipe_control.mol_res_spin.generate_spin_id_unique() function.  The unique spin ID now takes into account if the molecule is named or not (for single molecules).  This allows the function to be used when dealing with the structural data rather than the molecule, residue, and spin data structure.
        * Removed the full stop from the printout of the test names in the test suite.  This allows for quicker copying and pasting of the test name when running with the --time option and then selecting a single test to run.
        * Modified the Noe.test_noe_analysis system test to catch bug #21863 (https://gna.org/bugs/?21863).  This is the failure to create the ref and sat Grace 2D plots in the NOE analysis.
        * Improved the user feedback when executing a user function in the GUI.  The busy cursor is now turned on at the start of the user function wizard page method _apply() and turned off again at the end.  This would avoid user confusion, thinking that the program has frozen (as was the case in bug #21862, https://gna.org/bugs/?21862).
        * Changed the Noe.test_noe_analysis system test to handle the peak intensities correctly.  This relates to bug #21863 (https://gna.org/bugs/?21863), the grace.write user function not being able to write ref/sat plots as described in sample script noe.py.  Instead of trying to produce the 'ref.agr' and 'sat.agr' files for the non-existent 'ref' and 'sat' parameters, instead the 'intensities.agr' file is being produced for the peak intensity parameter.  The reference and saturated intensities will appear as two graph sets within that plot.
        * Changed the Noe analysis sample script to properly handle the peak intensity Grace plots.  This relates to bug #21863 (https://gna.org/bugs/?21863), the grace.write user function not being able to write ref/sat plots as described in sample script noe.py.  Instead of trying to produce the 'ref.agr' and 'sat.agr' files for the non-existent 'ref' and 'sat' parameters, instead the 'intensities.agr' file is being produced for the peak intensity parameter.  The reference and saturated intensities will appear as two graph sets within that plot.  These changes match those of the test suite.
        * Fix for the line numbering for the NOE analysis sample script in the user manual.  The line numbering for the code snippets did not match that of the full sample script shown at the start of that section of the NOE chapter.
        * Added a simple shell script to quickly grep the entire source tree while excluding .svn directories.  This will only work on POSIX systems (Linux and Macs).
        * Fix for the Noe.test_bug_21562_noe_replicate_fail system test.  The 'ref' and 'sat' parameters do not exist.  Therefore the grace.write user function calls in the system test script have been modified to output the 'intensities' parameter instead.
        * Complete rearrangement of the specific analysis code for the steady-state NOE.  This brings the code into line with the recent specific analysis code rearrangements, specifically in the specific_analyses.relax_disp package.
        * Changed the Noe auto-analysis to properly handle the peak intensity Grace plots.  This relates to bug #21863 (https://gna.org/bugs/?21863), the grace.write user function not being able to write ref/sat plots as described in sample script noe.py.  Instead of trying to produce the 'ref.agr' and 'sat.agr' files for the non-existent 'ref' and 'sat' parameters, instead the 'intensities.agr' file is being produced for the peak intensity parameter.  The reference and saturated intensities will appear as two graph sets within that plot.
        * Redesign and standardisation of the peak intensity data structure throughout all analyses in relax.  The various structures 'intensities', 'intensity_err', 'intensity_sim', 'sim_intensity', and 'intensity_bc' have all been renamed.  The new structures are called 'peak_intensity', 'peak_intensity_err', 'peak_intensity_sim' and 'peak_intensity_bc'.  This allows the structure to be processed as a standard parameter in the specific analysis API.  One very visible consequence is that plots of peak intensities, as well as value files, will now have peak intensity errors.  For backwards compatibility, the relax data store method _back_compat_hook() has been modified to catch all previous peak intensity object variants and to standardise and rename these to the new object names.  As the parameter is now called 'peak_intensity' rather than 'intensities', all calls to the grace.write and value.write for this parameter have been changed in the auto-analyses, the sample scripts, the test suite and the manual.
        * Fix for the Noe.test_noe_analysis system test.  The grace plots of the peak intensities now have error bars.
        * The legends in Grace plots are now turned on by default, if the legend flags are not specified.  The Noe.test_noe_analysis system test has been updated for the change.
        * Added matplotlib detection to the dep_check module.  This follows step 1 from the planning document at http://thread.gmane.org/gmane.science.nmr.relax.devel/5278.
        * Added matplotlib to the info module.  This follows step 1 from the planning document at http://thread.gmane.org/gmane.science.nmr.relax.devel/5278.
        * Modified the python_multiversion_test_suite.py script to run the relax information printout.  This is to test out the info module on multiple Python versions and to have a record of the setup of each Python version.
        * Python 3 fixes for the info module.  The new processor_name() function was not compatible with Python 3 as the text read from STDOUT needs to be 'decoded'.
        * The variables in the relax_fit.h file are now all static.
        * Added the new exp_mc_sim_num argument to the relaxation dispersion auto-analysis.  This is in preparation for fixing bug #21869 (https://gna.org/bugs/?21869).  This argument allows for a different number of Monte Carlo simulations for the 'R2eff' model when exponential curves are fit.  It will mainly be useful in the test suite to improve the accuracy of the R2eff errors, while still running a low number of simulations for the other models to allow optimisation to be quick.
        * Modifications to the Relax_disp.test_m61_exp_data_to_m61 system test.  This is to fix bug #21869 (https://gna.org/bugs/?21869), the failure of this system test.  The number of Monte Carlo simulation for the 'R2eff' model has been increased from 3 to 25 using the new exp_mc_sim_num argument to the dispersion auto-analysis.  To keep the test fast, only a single spin is optimised.
        * Redesign and major clean up of the specific_analyses.jw_mapping package.  The code has been broken up into separate modules.
        * Fix for the default value table documentation in the specific_analyses.jw_mapping package.  This was broken in the last commit.
        * Updates for the rest of relax for the redesign of the specific_analyses.jw_mapping package.
        * Redesign and major clean up of the specific_analyses.consistency_tests package.  The code has been broken up into separate modules.  This matches the similar specific_analyses.jw_mapping package.
        * Redesign and major clean up of the specific_analyses.relax_fit package.  The code has been broken up into separate modules.  The rest of relax has been updated to handle the changes.
        * Removed the empty documentation strings from the specific analysis API base class.  These are being gradually shifted into the specific_analyses.*.uf modules, so do not belong in the API object.
        * The specific analysis API classes are now all singletons.  This change will reduce the amount of memory used, as these classes are initialised multiple times throughout relax, especially in the test suite.  The API objects are not used for local storage so the multiple instance verses singleton design change will make no difference.  The singleton design pattern code has been added to the base class specific_analyses.api_base.Api_base so that all classes inherit the __new__() method which implements the singleton.
        * Shifted the NOE analysis specific user function documentation from the API object to the uf module.
        * More code refactorisation of the specific_analyses.n_state_model package into new modules.  The API object is now in the 'api' module, the remaining private methods have been shifted into the 'optimisation' and 'uf' modules, and the user function documentation moved to the 'uf' module.
        * Added units tests for package consistency testing for all of the remaining specific analyses.
        * Fixes for the unit tests for the N-state model specific analysis package changes.
        * Updated the package __all__ lists for a number of the specific analyses.
        * Shifted all of the private methods for optimisation from the relaxation dispersion API object.  These are now functions of the specific_analyses.relax_disp.optimisation module.
        * Created the new specific_analyses.relax_disp.uf module.  This consists of the private methods of the relaxation dispersion API object which act as the back end for the user functions, as well as the user function documentation, all shifted from the 'api' module.
        * Shifted the model-free analysis specific API object to the specific_analyses.model_free.api module.
        * Fixes for the new specific_analyses.model_free.api module.
        * Created the new specific_analyses.model_free.uf module.  This consists of the private methods from the 'main' module which act as the back end for the user functions as well as the user function documentation.
        * Created the new specific_analyses.model_free.parameters module.  This consists of the private methods from the 'main' and 'mf_minimise'.  All class methods have been converted into functions.
        * Created the new specific_analyses.model_free.optimisation module.  This consists of the merger of the 'mf_minimise' and 'multi_processor_commands' modules.  All the private class methods have been converted into functions.
        * Shifted all of the model-free specific analysis API methods into specific_analyses.model_free.api.
        * Clean up and refactoring of the specific_analyses.model_free.bmrb module.  The class methods have all been converted into functions, the deleted class is no longer a base class for the specific analysis API class.
        * The read_columnar_results() method has been removed from the specific analysis API.  This is only for backwards compatibility with ancient relax 1.2 and earlier model-free results files, so will never be used by any other analysis.
        * Converted all of the class methods in specific_analyses.model_free.results to functions.  This class has been removed from the API as well.
        * Renamed specific_analyses.model_free.results to back_compat.  This is to make the purpose of the module clearer, to avoid developer confusion.
        * Shifted the model-free classic_style_doc user function documentation to the 'uf' module.
        * Shifted the last private method out of the model-free specific analysis API class.  It has been converted into a function of the new 'data' module, for lack of a better name.
        * Shifted some of the specific_analyses.model_free.parameters functions into the new 'model' module.
        * Removed the test_grid_ops() method from the specific analysis API.  This has been shifted into the new lib.optimisation module and converted into a function, breaking a number of circular import kludges.
        * Fixes for the specific analysis API unit tests.  The 'instance' variable used for the singleton design pattern is skipped in the method and object checks.
        * Redesign of the specific analysis API.  All parts of relax using this API now work with the API objects directly.  The specific_analyses.setup module has been renamed to specific_analyses.api and the get_specific_fn() function has been eliminated.  Instead of calling this, the different parts of relax now obtain the API object by calling the new return_api() function.  This results in a large cleanup of the API - method names are no longer changed to a different name.
        * Fix for the new singleton design of the specific analysis API objects.  The use of the class namespace as a storage space has been eliminated.  This was causing test suite failures when checking the API objects.  For some reason, some of the target function objects were being placed in 'self'.
        * Created a directory for holding the CaM double rotor frame order synthetic data.
        * Capitalised the pivot and CoM variables in the base frame order distribution generation script.
        * Reintroduced the distribution PDB file creation to the frame order test data generation script.  This is the generate_base.py script in the test_suite/shared_data/frame_order/cam directory.  The ability to create the distribution.pdb file was long lost in this script, and can now be activated using the DIST_PDB class variable.
        * The Frame Order test data generation base script now loads all structures before rotating them.  This allows the progress printout to function correctly by not having any user function printouts as the rotations are occurring.
        * Created a simple double rotor geometric system to used for this frame order test data generation.  The system_create.py script creates the geometric system based on the CoMs of both domains in the parent directory and two perpendicular rotation axes passing through both CoMs.  A PDB file of the representation is created by the script.
        * Improvements and expansion of the frame order test data generation base script.  More of the class variables are now defined in this base class and dummy methods are provided to allow certain operations to be skipped (print_axis_system(), axes_to_pdb() and build_axes()).  Importantly, the script can now handle multiple modes of motion with the introduction of the key _multi_system() and _state_loop() methods.
        * Fixes for the calculation of the frame order matrix in the test data generation base script.  The matrix generation now handles multiple modes of motion correctly.  The total rotation matrix is constructed when looping over the modes by using the dot product of the individual rotation to the total, and then this is used to create the outer product, summed over all states.
        * The frame order test data generation base script now outputs the frame order matrix to 8 places.
        * Introduced the ROT_FILE flag to the frame order test data generation base script.  This allows the 'rotations.bz2' file creation to be skipped, if set to False.  This file takes time to create and is of limited use.
        * Removed a duplicated state.save call in the frame order test data generation base script.
        * The save file created by the frame order test data generation base script can now be bypassed.  When loading 1,000,000 PDB structures as models into the relax data store, the RAM usage can go over 10 Gb.  When trying to save this into a relax state file with the state.save user function, the time required can be over a day.  Therefore the SAVE_STATE class variable has been introduced to allow the state.save call to be bypassed.
        * Created the RDC and PCS back calculated test data for the CaM double rotor frame order model.  This consists of a uniform distribution over both rotors, the first centred in the C-domain and the second in the N-domain, and the two axes being perpendicular to each other along the CoM-CoM axis.  The distribution consists of 250000 rotated structures.  The frame order matrix for this model is also given.
        * Created a distribution of structures for the CaM double rotor frame order model.  This is only for a distribution of 100 structures, to keep the file size to a reasonable size.  A PyMOL *.pse file is also included to show the distribution together with the rotor system and the domain positions.
        * Updated the rotation() method of all the CaM frame order test data generation scripts.  The motion_index argument is now accepted by all of the methods to allow the base script to execute correctly.
        * Fix for the Frame_order.test_generate_rotor2_distribution system test.  The rotation() method now must accept the motion_index keyword argument.
        * Created the Frame_order.test_cam_double_rotor system test for the CaM synthetic data.  This will be used to implement the frame order double rotor model.
        * The CaM double rotor frame order test RDC data now has single quotes around the spin IDs.  This allows the data to be loaded in the Frame_order.test_cam_double_rotor system test.
        * Created subsets of the CaM double rotor frame order test PCS data.  This consists of data for only 5 spins, and matches those of the other CaM frame order test data.
        * Large refactorisation of the frame order package.  The private methods of the frame order package specific_analyses.frame_order have now all been shifted into modules.  This is to simplify the package by not having huge quantities of code in the __init__ module.  Now the code resides in the api, checks, data, optimisation, parameters, and user_functions modules.
        * Added the double rotor frame order model to the frame_order.select_model user function.
        * Better support for the parameters of the double rotor frame order model.
        * Initial implementation of the double rotor frame order model target function.  The target function func_double_rotor() has been created as a copy of the func_rotor_qrint() method, modified for the double rotor model.  Modifications will likely be needed as the compile_2nd_matrix_double_rotor() and pcs_numeric_int_double_rotor() functions are implemented.
        * Initial implementation of the lib.frame_order.double_rotor module.  This module implements the functions needed to solve the frame order analysis for the RDC (via the frame order matrix) and PCS (numerically).  The interfaces have been updated for the double rotor but most of the code still implements the basic rotor model from which it derives.
        * Fix for the double rotor frame order model when only RDCs are used.  The target function was not being aliased when no PCS data was present.
        * Changed the precision of the deactivated Frame_order.test_cam_double_rotor_pcs system test.  This test will run with the command "relax -s Frame_order.test_cam_double_rotor_pcs" and, because of the small angle of the test model, the chi-squared value differences for just the PCS were too small for the previous precision of 1 decimal place.
        * The double rotor system is now truly perpendicular.  This is for the CaM frame order synthetic test data.  The two axes were not perpendicular whereas for the model they should be.
        * Updated the double rotor distribution PDB file for the perpendicular axes.  This is for the CaM frame order double rotor synthetic data.  The number of structures in this distribution is set to 100 (10 per motional mode).  The PyMOL *.pse file has also been updated.
        * Updated the CaM frame order double rotor synthetic test data for the perpendicular axes.  The RDC and PCS data has been recalculated for 250,000 structures, this time with the axes being truly perpendicular.
        * Added a simple script for analysing the eigensystem of the CaM frame order double rotor test model.
        * Capitalised the class variables of all of the CaM frame order system test scripts.
        * Class variable cleanup for the CaM frame order system test scripts.  The variables are now all defined in the base script and only overwritten when needed by the individual tests.
        * Changed the handling of the pivot point in the CaM frame order system tests.  The pivot point is now a class variable, rather than being hardcoded into a function.  The handling of a second pivot has also been added.
        * Updated the CaM frame order double rotor system test script to have the correct two pivots.
        * Changes to the frame_order.pivot user function.  The 'order' argument has been added to allow for multiple pivots to be present.  The user function backend will store these as cdp.pivot, cdp.pivot2, cdp.pivot3, etc.  The 'fix' argument is now defaulting to False to make sure it is always boolean.
        * The second pivot is now being passed into the frame order target function class.
        * Simplified the CaM frame order system test base script.  The class variables are now always defined, so checking for their existence is pointless.  The CONE_S1 is now also defined in the base script as a class variable.
        * Added support for the new axis_alpha frame order parameter to the specific_analyses.frame_order package.
        * Implemented the new frame order rotor model parameters in the target function.  The parameters {axis_theta, axis_phi} have been replaced by the single axis_alpha.  To support the new model construct, the CoM of the entire system is now passed into the target function.
        * The AXIS_ALPHA parameter is now initialised in the CaM frame order system test base script.  The base script was broken a while back due to AXIS_ALPHA not being defined but being checked for.
        * Improvements for the centre of mass calculation for the frame order model optimisation.  This is now only calculated for the rotor models.  The CoM is also printed out for better user feedback.
        * The CaM frame order system tests for the rotor models are converted to the new axis_alpha parameter.  The axis_theta and axis_phi spherical coordinates are converted to the new reduced parameter set defined by a random point in space (the CoM of all atoms), the pivot point, and a single angle alpha.
        * The CaM frame order system test base script is now using lib.geometry.vectors.vector_angle().  This is for correctly calculating the alpha axis angle for the rotor models.
        * Fixes for the rotor axis alpha angle conversion in the CaM frame order system test base script.  The pivot point is now the point on the rotor axis closest to the reference point (the CoM).  Therefore the closest point is now calculated from the pivot point on the axis and the axis vector.  This closest point is needed for defining the new minimal parameter set for the rotor models.
        * Changes for the convert_rotor() method of the CaM frame order system test base script.  The method now sets the alpha angle rather than returning it.  The method now also resets the pivot point to the point on the rotation axis closest to the CoM.
        * Fixes for the rotor axis reconstruction in the func_rotor_qrint() frame order target function.  This is for the rotor model.  The axis alpha angle is now correctly converted into the rotor axis using the CoM and pivot point.
        * Optimisation is now turned on for the Frame_order.test_cam_rotor2 system test.  This is to reveal deficiencies in the handling of the new axis alpha parameter.
        * The frame order optimisation results unpacking function now supports the axis alpha parameter.  This is in the function specific_analyses.frame_order.optimisation.unpack_opt_results().
        * Updated the chi2 value check in some of the CaM frame order system tests for the rotor model.  The chi2 value is slightly different due to truncation and conversion artifacts of the parameter set reduction.
        * Shifted all of the code for calculating the frame order rotor axis into lib.frame_order.rotor_axis.  The new frame_order.rotor_axis module consists of three function for creating a unit vector or the rotor axis using either the axis alpha angle, the two spherical angles or the three Euler angles.
        * Renamed the specific_analyses.frame_order.user_functions module to uf.
        * Fix for the optimised chi-squared value check in the Frame_order.test_cam_rotor system test.  The reduced parameter set results in a slightly different chi2 value.
        * Shifted the frame order average domain position info check from the 'optimisation' to 'checks' module.
        * Fix for the CaM frame order system tests.  The axis alpha angle and pivot shifting to the closest point to the CoM in the base system test script now only happens for the 'rotor' and 'free rotor' models.  This allows the tests for the isotropic cone models to pass again.
        * Fixes for all of the CaM frame order optimisation scripts in the test data directories.  The frame_order.average_position user function is now essential.
        * The centre of mass printout in the frame order target function setup now uses the verbosity argument.  This means that the printout is not shown for the Monte Carlo simulation optimisation.
        * Correction for the nu_CPMG to tau_CPMG conversion formula in the dispersion chapter of the manual.  In relax, the conversion nu_CPMG = 0.25 * tau_CPMG is used and not nu_CPMG = 0.5 * tau_CPMG.
        * Merged the Van't Hoff and Arrhenius lines of the dispersion software comparison table of the manual.
        * Renamed the specific_analyses.relax_disp.disp_data module to specific_analyses.relax_disp.data.  This is to match the module naming convention used in the other specific analyses, and as detailed in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/5294.
        * Updated all of the frame order optimisation scripts for the CaM test suite data.  These simple testing scripts were very much out of date and non-function for the current code.  Half of the code in these scripts is now implemented in the concise frame_order.pdb_model user function.
        * Updated the ancient test_suite/shared_data/frame_order/cam/rotor2/pcs_only/frame_order.py script.  This now matches the script of its parent directory.
        * Simplified all of the CaM frame order optimisation testing scripts.  These are for the synthetic test suite data.  The unnecessary class structure of the scripts has been eliminated.
        * The frame_order.pivot user function can now be used to turn the pivot optimisation on and off.  If the pivot point is not given, this user function will now just set the fixed flag and nothing else, allowing the optimisation status of a pre-set pivot to be changed.
        * Added the axis alpha angle to the frame order return_units() API method.
        * The frame order axis alpha angle is now defined in the grid search from -pi to pi.
        * Replaced the 'elif' statements with 'if' in the frame order update_model() function.  This is to avoid possible future bugs as the logic was not consistent.
        * Renamed the specific_analyses.api_objects module to parameter_object to better reflect what it is.  This contains a single object for the parameter list object and therefore does not need to be generalised for additional types of objects for the specific analysis API.
        * Updated the module docstring of specific_analyses.parameter_object to match its purpose.
        * Created a parameter list object for the relaxation dispersion analysis.  Instead of using the parameter list object from the base class, the dispersion analysis now defines its own.
        * Docstring improvements for the add_min_data() parameter list base class method.
        * Created two new parameter list methods from the relaxation dispersion code.  The add_model_info() and add_peak_intensity() base class methods have been created from the relaxation dispersion code.  These are just aliases for setting up a number of parameters via add() in a standard way.
        * The frame order specific analysis API object is now truly a singleton.  This should help eliminate some bugs.
        * Standardised all of the parameter list objects for the specific analyses.  All of the specific_analyses packages now contain a parameter_object module which defines all of the parameters.  The ordering of these is now consistent between the analyses, the result of which will be more consistent ordering of element in the relax XML state files.  The new Param_list.add_csa() base class method has been added to standardise the CSA parameter.  And the capabilities of the add_model_info() method has been expanded.
        * The parameter list objects in the specific analysis API are now singletons.  This has no immediate benefit as these classes are only instantiated once.  But it will allow for efficient reuse of these objects in the future and for expansions of the specific analysis API.
        * The frame order pivot points are now stored differently in the current data pipe.  Instead of being stored as a list or array of numbers in cdp.pivot, the point is now stored as cdp.pivot_x, cdp.pivot_y and cdp.pivot_z.  The second pivot cdp.pivot2 is now stored as cdp.pivot_x_2, cdp.pivot_y_2 and cdp.pivot_z_2.  This is to simplify the automated handling of optimisation parameters.  Rather than having to convert the pivot_x, pivot_y, and pivot_z parameters to and from a list, the same mechanisms can now be used for all of the optimised frame order parameters.  This will be used to hugely simplify many of the functions in the specific_analyses.frame_order.parameters module and eliminate a large source of bugs.
        * Temporary deactivation of the Frame_order.test_cam_double_rotor system test.
        * Huge simplification of the specific_analyses.frame_order.parameters.assemble_param_vector() function.  The parameters are now assembled in a generic way by looping over cdp.params.  The simpler code should also be faster.
        * Huge simplification of specific_analyses.frame_order.parameters.param_num().  This now simply calls update_model() and then returns the length of cdp.params.
        * Clean up of the specific_analyses.frame_order.parameters module.  The unused and terribly designed assemble_limit_arrays() function has been deleted.  And unused imports have been removed.
        * Simplification of the specific_analyses.frame_order.optimisation.unpack_opt_results() function.  Looping over the cdp.params parameter list is now used to minimise the amount of replicated code.
        * The frame order analysis is now using the special frame order parameter object.
        * Elimination of the specific_analyses.frame_order.checks.check_rdcs() function.  This function duplicates the functionality of pipe_control.rdc.check_rdcs() while not being as comprehensive.  Switching to the pipe_control.rdc version minimises the amount of code in the frame order analysis, decreasing the potential for bugs.
        * Simplified the assemble_scaling_matrix() frame order function.  The data_type argument no longer does anything, so has been eliminated.
        * Clean up of the base_data_types() frame order function and it use.  The propagation of the data type list around the frame order code is now greatly reduced.  And the alignment tensors and NOESY data have been removed from the base_data_types() function - these are not used.
        * Docstring fixes for the frame order specific analysis API object.  A number of the methods were referring to the base data as being alignment tensors, but this has changed to RDCs and PCSs a long time ago.
        * Clean up and fixes for the frame order model_statistics() API method.  The number of data points 'n' was incorrectly calculated using the original alignment tensor base data.
        * Eliminated the specific analysis API object base __init__() method.  This is no longer needed as the parameter list object is now analysis specific and set up by each analysis type separately.  The calls to this method from the derived classes have therefore also been deleted.
        * Shifted the frame order specific API deselect() method into the Api_common base class.  The method has been renamed to _deselect_global() and extended to handle Monte Carlo simulations.
        * The specific API PARAMS object is now private.  Apart from fixing a number of unit tests, these aliased singletons should not be accessed by the rest of relax.
        * Created the specific analysis API common method _is_spin_param_false().  This simply returns False.  The is_spin_param() frame order method has been deleted and this common method is now used instead.
        * Replaced the frame order specific API model_loop() method.  The base method _model_loop_single_global() is used instead.
        * Replaced the frame order API model_type() method with the base _model_type_global() method.  The two methods were identical anyway.
        * Fixes for the units of the ave_pos_x, ave_pos_y, and ave_pos_z frame order parameters.
        * Removed the frame order API return_units() method.  This method has been superseded by the parameter list object.
        * Added the PCS and RDC as parameters for the frame order and N-state model analyses.  These are now defined in the respective parameter list objects.  The base method add_align_data() has been created to avoid code duplication.
        * Eliminated the last of the specific analysis API return_units() methods.  This functionality is now provided by the parameter list object.
        * Eliminated the model-free specific analysis API data_type() method.  This functionality is now provided by the parameter list object.
        * Converted the N_state_model.test_5_state_xz system test to use a new way to set parameters.  Instead of using pseudo-parameters for the value.set user function such as 'p0', 'p1', etc. for the probabilities, which are then converted into the 'probs' parameter with the index taken from the name, instead the index is now directly given.  The value.set user function will need to be modified to handle this.  The aim is to standardise the parameter list object for the N-state model analysis.
        * Converted the remaining N-state model system tests to use the new value.set index argument.
        * Converted all of the N-state model parameters to use the parameter list object.  The default_value(), return_data_name() and return_grace_string() API methods have also been deleted as these have been superseded by the parameter list object.
        * Clean up of the N-state model user function docstrings.  The pseudo-parameter names such as 'p0', 'p1', etc. no longer exist.
        * The new index argument for the value.set user function now defaults to zero.  This is for backwards compatibility as the default value of None was not handled by the user function backend.
        * Fix for one of the value.set user function unit tests.  The 'alpha2' N-state model parameter no longer exists, and the '2' is now supplied as index=2.
        * Shifted the core of the data_names() specific analysis API method into the parameter list object.
        * Renamed many of the specific analysis parameter list object methods to match the API names.  This is to prepare for a decoupling of the parameter list object from the API object.
        * Updated the relaxation dispersion citation for relax as this is now officially published.
        * All of the add*() methods of the parameter list object have been made private.  This is to prepare the object to be accessible to the rest of relax, so that it can be decoupled from the specific API object.
        * Shifted the minimisation Grace strings and units into the parameter list object.  The return_grace_string() and return_units() functions of the pipe_control.minimise module have been deleted and their contents shifted into the specific analysis parameter list object.
        * Simplified the pipe_control.minimise.minimise() function.  The specific API object only needs to be fetched once.
        * Eliminated the return_data_name() concept from the specific analysis API.  The parameter names can now only have one value, i.e. 's2' is different from 'S2'.  In addition, a number of related functions have been deleted form the pipe_control.minimise module as these are now handled by the parameter list object.  The deleted functions are return_conversion_factor() and return_value().
        * Shifted the Brownian rotational diffusion tensor parameters into the parameter list object.  This only affects the model-free analysis.  The pipe_control.diffusion_tensor module functions default_value(), return_conversion_factor(), return_data_name() and return_units() have been eliminated.  These functions have been merged together with the diffusion parameter self._add() calls in the model-free specific parameter list into the new parameter list base class _add_diffusion_params() method.  To allow the model-free analysis code to differentiate between diffusion and model-free parameters, the new scope() parameter list base class method has been created.  Diffusion parameters return 'global' whereas model-free parameters return 'spin'.  The model-free specific API methods default_value() and is_spin_param() have been deleted as these are now provided fully by the parameter list object.  The is_spin_param() method has been newly implemented in the parameter list object to check the parameter scope.
        * Eliminated a lot of unused code from the pipe_control.align_tensor module.  This includes the functions data_names(), default_value(), map_bounds(), map_labels(), return_conversion_factor(), return_data_name() and return_units() as well as the unused and very old user function documentation __default_value_prompt_doc__, __return_data_name_prompt_doc__ and __set_prompt_doc__.  These are all remnants from the origin of the module - the copying of the diffusion_tensor module.  But they have never been used.
        * Changed the values of the set argument for the parameter list object.  The 'generic' value has been renamed to 'fixed' and is now for all permanently fixed parameters of the model - for example the CSA value in a number of analyses.  The default set argument value of the _add() method has been changed to 'all' so that any parameters registered via that method are not placed in a special set (unless specified otherwise).
        * Clean up and fixes for the parameter definitions in the consistency testing analysis.  The fixed and calculated parameters are now defined in the correct sets, and the description for tc has been expanded and improved.
        * Added the ability to automatically create the parameter tables for the user function documentation.  These are the tables used in many of the user function docstrings.  This has been added to the parameter list base class.  The section title is pre-specified by the new _set_uf_title() method, and the table caption and LaTeX label by the _set_uf_table() method.  The documentation is generated by calling the uf_doc() method.  This uses the new type_string() method to add a compact parameter type string representation to the table.  The aim is to eliminate all of the hard-coded tables in the specific analyses which are always very quickly outdated.  By automatically creating the tables, this simplifies the codebase and simplifies the addition of new analysis types.
        * The parameter tables are now properly initialised in all of the specific analyses.  This will allow the tables to now be used in the user function documentation.
        * The auto-generated user function tables can now display the base units.
        * Spacing fix for one of the diffusion tensor parameter descriptions.
        * The label and caption for the parameter list user function documentation is now supplied to uf_doc().  This allows different types of tables to be generated, for example the default value is useful for the value.set user function but not value.write, while allowing tables to still be shared.
        * Expanded the steady-state NOE parameter description.
        * Expanded the reduced spectral density mapping parameter descriptions.
        * The default scope for the parameter list object uf_doc() method is now 'spin'.  Most of the parameter tables are for setting spin parameters, so this will minimise code.
        * Fixes for the specific analysis parameter list singleton object.  These objects are now really singleton objects and are only initialised once.
        * Fixes for some of the NOE system tests - the NOE parameter description is now different.
        * Shifted the user function documentation creation into the parameter list objects.  The uf_doc() method will now return the pre-created documentation object, and the original base class method for creating the documentation has been renamed to _uf_param_table().
        * Shifted all of the user functions to use the auto-generated parameter tables.  All of the specific analysis default_value_doc and return_data_name_doc documentation objects have been deleted and replaced with the auto-generated ones.  This results in a big code clean up and removes synchronisation issues with the user function documentation quickly becoming out of date when parameters change.
        * Expansion of the dx.map user function documentation.  This now includes tables of the N-state model and relaxation dispersion parameters.  A new auto-generated model-free parameter table including the diffusion parameters has been created and is now used instead of the separate diffusion tensor and model-free parameter tables.
        * Deleted the diffusion tensor __return_data_name_doc__ documentation object.  This is no longer used, being redundant with the new parameter list objects.
        * The frame order parameter tables for the user function documentation are now created.
        * The dx.map user function documentation now included the frame order parameters.
        * Different parameter sets can now be specified when creating the parameter tables.  This is for the analysis specific parameter list objects and the auto-generated user function documentation.
        * Clean up of the grace.write user function documentation.  The minimisation statistics table has been removed and instead the minimisation statistics are included in the parameter tables of the specific analyses, when appropriate.
        * Code clean up - deleted the return_data_name_doc and set_doc pipe.control.minimise objects.  These user function documentation objects are no longer used.  They were also extremely out of date.
        * Created the parameter list object base class _uf_doc_loop() method.  This will be used to loop over all or subsets of the user function documentation parameter tables.
        * The model-free parameter setting documentation has been shifted into the parameter list object.  As the text was quite out of date, it has been updated to the current relax design.
        * The J(w) mapping parameter setting documentation has been shifted into the parameter list object.  This has also been updated to reflect the current design of relax.
        * The consistency testing parameter setting documentation has been shifted into the parameter list object.  This has also been updated to reflect the current design of relax.
        * The relaxation dispersion parameter setting documentation has been shifted into the parameter list object.  The documentation has also been rewritten as it originates from Sebastien Morin back in 2009 and is now very much out of date.
        * Deleted the relaxation curve-fitting parameter setting documentation.  This really didn't say anything.
        * The N-state model parameter setting documentation has been shifted into the parameter list object.
        * Updated the two_domain.py N-state model sample script.  The value setting for the N-state model is now handled differently.
        * More updates of the N-state model sample scripts for the value.set user function changes.
        * Deleted the diffusion tensor parameter setting documentation from the value.set user function.  These values have not been able to be set by the value.set user function for over half a decade.  Therefore this documentation can only lead to user confusion.
        * Deletion of the user function documentation in the pipe_control.diffusion tensor module.  The __default_value_doc__ and __set_doc__ documentation objects are out of date and no longer used anywhere in relax, so they have been eliminated.
        * Shifted the model-free parameter writing documentation to the parameter list object.
        * Rearranged the parameter table ordering in the value user functions.  The order now better matches that of the chapters of the user manual and is consistent between the functions.
        * More reordering of the parameter tables for the value user functions.
        * Removed all of the prompt.doc_string.regexp_doc documentation objects from the user functions.  This is the regular expression documentation which no longer has a purpose.  It was for specifying multiple parameters simultaneously in user functions such as value.set, but this functionality has been removed.
        * Created parameter tables with no additional trailing text.  This is used in a few of the user functions.
        * Updated the value.copy user function documentation for the frame order theory.  The value.copy title has been changed to not be spin specific and a table of the frame order parameters has been added.
        * Improvements for the value.display user function documentation.  The N-state model parameter table has been removed as these parameters are not spin specific and cannot be used.  And the title has been modified.
        * Improvements for the value.read user function documentation.  The N-state model parameter table has been removed as these parameters are not spin specific and cannot be read from a file.  And the title has been modified.
        * Updated the value.set user function documentation for the frame order theory.  The value.set title has been changed to not be spin specific and a table of the frame order parameters has been added.  The spin ID documentation has also been rewritten.
        * Changed the title in the value.write user function documentation.
        * Changed the title for the value user function class.
        * Docstring update for the relaxation dispersion linear_constraints() function.
        * The pivot point x, y and z coordinates are now registered as parameters of the frame order analysis.  These are stored as the parameters pivot_x, pivot_y and pivot_z.
        * Docstring fix in the relaxation curve-fitting linear_constraints() function.
        * Converted the status.escalate variable into module variables for lib.errors and lib.warnings.  This variable is set by the command line flag '-e' or '--escalate'.  By converting it into a module variable, the lib.errors and lib.warnings warnings are now independent of relax.
        * Created the lib.warnings.TRACEBACK variable.  When True, this will cause stack-traceback to be printed out with the warning.  This is to decouple the traceback printout from the warning to error escalation.
        * Created the new '-r' or '--traceback' relax command line option.  If supplied, stack tracebacks will be shown for all RelaxWarnings and RelaxErrors.  This allows for finer debugging control.
        * Clean up of the debugging command line options.  The debug flag now will cause stack tracebacks to be printed on all RelaxWarnings.
        * Created the '--error-state' command line option for saving a pickled state when a RelaxError is raised.  This gives greater control of a powerful feature added to relax by Chris MacRaild.  The pickled state can then be attached to bug reports or can be used to quickly load the state prior to failure when in the scripting UI mode.
        * Reordered the debugging command line options and removed the '-r' shortcut.
        * The lib.errors module is now really independent of relax - the compat module is no longer used.  Instead, the Python 2 and 3 versions of the pickle module are imported using try statements.
        * Decreased the amount of newlines around the printout from the '--error-state' command line option.
        * Improved support for printing stack tracebacks with RelaxWarnings.  The '--traceback' command line option will now show a full traceback.  A replacement warnings.showwarning() function has been written to write out the traceback before the warnings.formatwarning() replacement function is called.
        * Divide by zero avoidance fix for the rotor frame order model module lib.frame_order.rotor.
        * Removed the dependency on the relax dep_check module from the relax library.  This is to further decouple the library from relax.
        * Added a script for testing the independence of the relax library.
        * Removal of all unused imports in the lib.dispersion package.
        * Improvements to the test_library_independence.py development script.  This script for checking the independence of the relax library will now recursively import all packages and modules in the library and report at the end a list of all failures.
        * Shifted the Python 2 and 3 compatibility module 'compat' into the relax library.
        * Shifted the pipe_control.sequence.validate_sequence() function into the relax library.  For this, the new lib.sequence module has been created.  This change is for better library independence.  A circular import with lib.io and lib.arg_check has also been resolved.
        * Shifted the read_spin_data() and write_spin_data() functions from lib.io to lib.sequence.
        * Removed the dependence on the relax 'dep_check' module from the lib.frame_order package.  This is for more independence of the relax library.
        * Added the missing Bioinformatics journal to the bibtex file journal name aliases.
        * Huge clean up of all unused imports in relax.  These were found using the find_unused_imports.py development script.  A number of these changes significantly decrease the possibilities of circular imports appearing in the future.  And this also makes the relax library more independent from the rest of relax.
        * Shifted the data_store.relax_xml module into the relax library as lib.xml.  This module contains a couple of functions which are used for converting Python objects into an XML representation and back again.  These are used not only by the relax data store, but also a number of the structural objects in the relax library (which are themselves placed in the relax data store).  This makes the relax library more independent from the rest of relax.
        * Shifted many of the pipe_control.structure.geometric functions into the relax library.  All but two functions from the pipe_control.structure.geometric module are independent of the relax data store.  These have been shifted into the new lib.structure.geometric module.  This removes most of the remaining relax dependencies in the relax library.
        * Removed the automatic axis labelling in the lib.software.grace.write_xy_header() function.  This is the automatic labelling based on the parameter Grace strings and units of the specific analysis type.  This is now preformed by the specific analyses themselves so the automatic code is not needed or used.  This allows the dependence on the pipe_control.pipes module and the specific analysis API to be removed making the relax library now 100% independent from the rest of relax.
        * Editing of the relax command line option descriptions.
        * Created a new test category for the relax test suite - the software verification tests.  This is part of the full test suite or can be run by itself using the new --verification-tests command line option.  Such tests are best described by https://en.wikipedia.org/wiki/Verification_and_validation_%28software%29.  These tests will be used to make sure that the design aims of the relax source code are satisfied.  For example that the relax library is independent from the rest of relax.  Or that the package __all__ lists actually contain all modules and sub-packages (these tests are currently part of the unit tests).
        * Shifted the relax library independence developer script into the software verification tests.  The functionality of the devel_scripts/test_library_independence.py script is now within the Library.test_library_independence software verification test.  Therefore the script has been deleted.
        * Updated the text for the software verification tests in the test suite.
        * The relaxation dispersion auto-analysis now outputs the R20, R20A, R20B, and R1rho0 parameters.  This includes both text files and 2D Grace plots.
        * Python 3 fix for one of the old scripts in the test suite directories.
        * Improved error messages for when the GUI is launched but the wxPython installation is broken.  Now the case of a broken wxPython installation is handled rather than just a missing installation.  The dep_check module will store the import error message, and relax will now report that back to the user.
        * Python 2.5 and 2.6 compatibility for the Library.test_library_independence verification test.  The importlib package is not available in these Python versions, but the code in the Python 2.7 library file importlib/__init__.py is compatible all the way back to Python 2.3.  Therefore the importlib functions have been copied directly into the system test script and the importlib dependency removed.
        * Updated one of the OMP model-free results files for the different ordering of parameters in the XML.  The changes to the parameter setup for the model-free analysis means that the XML files are now ordered differently.
        * Fix for the Test_data.test_count_relax_times_r1rho relaxation dispersion unit test for Python 3.2+.  The '%s' representation of floating point numbers is different on these Python versions - the number of decimal places used are different by default.
        * Added Python 3.4 support to some of the development scripts.
        * Added 4 more relaxation dispersion system tests to the blacklist for when C modules are missing.  This allows these 4 tests to be skipped in the system test rather than failing with "RelaxError: The exponential curve-fitting C module cannot be found.".
        * Changed the backward compatibility hook for old state files for the spectrometer frequency.  The behaviour has been changed so that the data pipe structure spectrometer_frq_list is now sorted.  This simply allows a number of tests to pass on Python 3.3+, a user would not notice any differences.
        * Fixes for two relaxation curve-fitting system tests for Python 3.3+.  These are the Relax_fit.test_curve_fitting_height and Relax_fit.test_curve_fitting_volume system tests which fail due to accuracy differences and a bad call to the UnitTest method assertEqaul() which should have been an assertAlmostEqual() call.
        * Added the matplotlib module to the Python binary and module seeking script.
        * Added dataset for system test.  System test for CPMG dataset, (http://dx.doi.org/10.1073/pnas.0907387106) Kaare Teilum, Melanie H. Smith, Eike Schulz, Lea C. Christensen, Gleb Solomentseva, Mikael Oliveberg, and Mikael Akkea 2009 SOD1-WT at 25 C.
        * Added system test to analyse data.  System test for CPMG dataset, (http://dx.doi.org/10.1073/pnas.0907387106) Kaare Teilum, Melanie H. Smith, Eike Schulz, Lea C. Christensen, Gleb Solomentseva, Mikael Oliveberg, and Mikael Akkea 2009 SOD1-WT at 25 C.
        * The debugging command line option no longer turns on RelaxWarning tracebacks.  These tracebacks can be separately turned on with the --traceback command line option.
        * Made name for system test shorter and moved data to shorter folder name.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.
        * Modified system test for cleaner implementation of tests.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.
        * Lowered range for grid search by factor 10 for kex to now between 1-10000.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.
        * Changes to system test Relax_disp.test_hansen_cpmg_data_auto_analysis.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.  The grid search needed to be increased by +1 and lowering of some results by one digit.
        * Lowering of precision in Relax_disp.test_hansen_cpmg_data_auto_analysis_numeric.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.
        * Changes to system test Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.  The grid search needed to be increased by +1 and lowering of some results by one digit.
        * Changes to system test Relax_disp.test_hansen_cpmg_data_missing_auto_analysis.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.  The grid search needed to be increased by +1 and changes of some results.
        * Modified system test Relax_disp.test_sod1wt_t25_to_cr72.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.
        * Modified dw and kex in system test Relax_disp.test_tp02_data_to_tap03.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.
        * Split system test Relax_disp.sod1wt_t25_to_cr72 into part as setup and test part.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.
        * Started implementation of error analysis bug.  Regarding bug #21954, (https://gna.org/bugs/?21954) - Order of spectrum.error_analysis is important.
        * Small edit of the relax command line option descriptions.
        * Undid the modification of dw and kex in system test Relax_disp.test_tp02_data_to_tap03.  Regarding bug #21953, (https://gna.org/bugs/?21953) - weird performance of grid search.  The number of iterations needed to be increased from 2000 to 2500 to allow the values to be found.
        * Further extended system test Relax_disp.test_sod1wt_t25_bug_21954_order_error_analysis.  Regarding bug #21954, (https://gna.org/bugs/?21954) - order of spectrum.error_analysis is important.
        * Extended --gui-tests Relax_disp.test_hansen_trunc_data.  Regarding bug #21954, (https://gna.org/bugs/?21954) - order of spectrum.error_analysis is important.  To catch errors in this dataset.
        * This time the blacklisted relaxation dispersion system tests have been correctly reduced.  Only one blacklisted test did not require the C modules to be compiled.
        * Shifted all of the dispersion model descriptions and parameter lists to the variables module.  The descriptions and parameter lists which were part of the relax_disp.select_model user function backend have been shifted into the specific_analyses.relax_disp.variables module as MODEL_DESC_* and MODEL_PARAMS_* variables.  The descriptions have also all been standardised.  The MODEL_DESC and MODEL_PARAMS dictionaries have also been created to hold all of the descriptions and parameters in one place.
        * The General.test_bug_21720_pipe_switching_with_tab_closure GUI test now works without compiled C modules.
        * Updated the release checklist for the new minfx version 1.0.6 release.  See https://gna.org/forum/forum.php?forum_id=2456 and https://freecode.com/projects/minfx.
        * Fixes for the specific API _set_param_values_spin() method for lists and dictionaries.  This is for the value.set user function to allow it to handle parameters of different types.  For example the 'R2' parameter in the relaxation dispersion analysis.  This API common method now sets all dictionary elements, list elements, or the variable to the given value.
        * Created the new specific_analyses.relax_disp.variables.PARAMS_R20 list.  This variable is a list of all R20 parameters of the dispersion models.  It has been shifted out of the parameters module.
        * Created a relaxation dispersion specific API set_param_values() method.  This originates from the base _set_param_values_spin() method from the api_common module.  The method has been extended to handle the R20 parameter types - generating the current dictionary keys as needed.
        * Expanded the relaxation dispersion auto-analysis to allow the grid search to be turned off.  By setting the grid_inc argument to None, the grid search will be turned off.  As a replacement, the value.set user function is used for all model parameters to set them to their default values prior to minimisation.  This design is for speed as optimisation from the defaults is often - though not always - good enough.  It can be used, for example, in the test suite to make the system tests much faster.
        * Changed the default R20 relaxation rate from 15 to 10 rad.s^-1.  This is probably closer to the average rate expected for molecules studied by NMR.
        * The R2eff dispersion parameter now also defaults to 10 rad.s^-1.
        * Expanded the dispersion specific API set_param_values() method for the 'r2eff' and 'i0' parameters.  This now sets these parameter values correctly if the value sent into the method is not composed of dictionaries.
        * Large speed up of the relaxation dispersion system tests by about 20%.  This was achieved by turning the grid search off in the following system tests:  Some of the optimisation values are slightly different, or completely different for the one example of the CR72 model fitted to no exchange, and these have been updated in the tests.
        * Changed the bounds for the R20 parameters in the default grid search.  The range of 1 to 40 rad.s^-1 was previous used.  This has been narrowed to 5 to 20.
        * Added function to find minimum R2eff value to set as R20 value before grid search.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Added system test for setting R20 from minimum R2eff before grid search.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.  System test: -s Relax_disp.test_sod1wt_t25_set_grid_r20_from_min_r2eff.
        * Extended api value.set to use index in value setting.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.  The index used is expected to match the spectrometer frequency.
        * Added user function: relax_disp.set_grid_r20_from_min_r2eff.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Modified system test to use user function instead.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Added relax_disp.set_grid_r20_from_min_r2eff functionality to the relax dispersion auto_analyses.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Fix for skipping grid search, when set parameter values are of dict() type.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Extended system test for -s Relax_disp.test_sod1wt_t25_set_grid_r20_from_min_r2eff.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.  The system test now both test the creation of the correct values, the running of grid_search, and the auto_analysis.
        * Added True/False button to activate relax_disp.set_grid_r20_from_min_r2eff in auto-analyses.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Set the verbosity=1, since the output is minimal.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Fix for non-existing dictionary keys causing errors.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Fix for setting index=None, when setting default values for parameters.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Parameter values pre-set to 0.0 is now skipped in grid_search.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Renamed system test to reflect what it is testing.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Better formatting of text in user function.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Python 3 fix.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Better wording of experimental feature in GUI tooltip.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * An additional warning paragraph has been added to the user function.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.
        * Fix for system test Relax_disp.test_set_grid_r20_from_min_r2eff_cpmg.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.  Fixed values for testing was added.
        * Improved the error reporting from the Library.test_library_independence verification test.
        * Fix for setting the pre-set values in grid_search.  Feature request: #3151, (https://gna.org/support/?3151) - user function to set the R20 parameters in the default grid search using the minimum R2eff value.  Now test that values which are of dictionary types, has more than 0 values.
        * Modified system test Relax_disp.test_sod1wt_t25_to_cr72.
        * Added a paragraph to the clustering section of the dispersion chapter covering parameter copying.  This explains the purpose of the relax_disp.parameter_copy user function.
        * Created system test to catch the error -s Relax_disp.test_sod1wt_t25_to_sherekhan_input.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Removed the necessity that len(cdp.relax_time_list) = 1 when issuing the sherekhan input user function.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Made testing of files for system test -s Relax_disp.test_sod1wt_t25_to_sherekhan_input.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.  Warning, the sherekhan user function will write to current directory.
        * Added "dir" as input to the user function relax_disp.sherekhan_input in system test.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Modified the relax_disp.sherekhan_input to accept dir as input.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Turning off local dir writing in system test and set the correct time_T2.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Fix for letting ShereKhan user function write the time_T2 correct.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Fix for correct looping over time points, when creating ShereKhan files.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Added check for number of time points is 1.  Bug #21995: (https://gna.org/bugs/?21995) creating sherekhan input files, with data for several fields and different time_T2.
        * Added model MODEL_B14 to system test Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Added MODEL_B14 to specific_analyses.relax_disp.variables.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Further added info for MODEL_B14 to specific_analyses.relax_disp.variables.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Added B14 description to the relax_disp.select_model user function front end.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Added model B14 to be found as target function.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Added empty b14.py to relax library lib/dispersion/b14.py.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Extended docstring in b14.py file.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Implemented start system test for model B14.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  System test is Relax_disp.test_baldwin_synthetic.
        * Added Baldwin model B14 test data.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.
        * Removed MODEL_B14 to be tested in normal setup.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This is to allow the system test to pass.
        * Removed the standard transparent "on" setting in grace images script file.  This was rather an annoyance than helpful.
        * Made a generic script to generate R2eff data for a CPMG model based on spin parameters, and fit the data.  Still needs to implement some noise method.  1) The idea is to generate R2eff data with a numerical model with some extreme parameters.  2) Then add noise to the R2eff data.  3) Then fit with a analytical model.  Evaluate the performance on the analytical model.  This follows the idea of the paper:  http://dx.doi.org/10.1016/j.jmr.2014.02.023 "An exact solution for R2,eff in CPMG experiments in the case of two site chemical exchange" Andrew J. Baldwin, Journal of Magnetic Resonance, 2014.  The script can be extended to also include global fitting, to test this out.  The script is also ideal, when trying to implement a new model, since test-data is ready at hand.
        * Docstring update for the test suite runner class - the verification tests are now listed.
        * Added the software verification tests to the relax GUI.  The verification tests can now be selected via the "Tools->Test suite->Verification tests" menu entry.  Running the full test suite via the menus also now included the verification tests.
        * Reordered the B14 model according to release year.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Redid ordering of Model B14 according to release year.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Reordered the model B14 according to release year.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Reordered model B14 in target functions.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Python API documentation corrections for the model B14.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Replaced copyright notice for the Baldwin.py script.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Changed the compression back 9, when creating grace PNG files.  It doesn't change the quality, just the time to create the file and the size of the file.  PNG is lossless, so compression levels 1 to 9 are all pixel-perfect.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Added a check for the existence of data pipes to the return_api() specific analysis function.
        * Added a README file to the sample_scripts directory to help users understand what these scripts are for.  It also explains how these scripts should be used.
        * Implemented synthetic CPMG system test.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Small changes to synthetic script data generator.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Made synthetic CPMG script accept R2eff noise values as input.
        * Added array with zero R2eff error to system test Relax_disp.test_cpmg_synthetic.
        * Added a system test, which proves that small dw values of 1, makes the minimisation goes wrong.  This is for synthetic data with R2eff values of +/- 0.05, which is to be expected for real data.
        * Added a row to the dispersion software comparison table for TROSY-type data.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/5414/focus=5501.
        * Added a row to the dispersion software comparison table for the support of scalar coupling effects.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/5414/focus=5501.
        * Added model B14 to the list of MODEL_LIST_NUMERIC_CPMG.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.  Model B14, uses the number of ncyc/CPMG blocks in its analytical equation.  To pass this information correct and calculate the ncyc power, it should be in this list.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Letting the error be 0.1 in the system test for B14.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.  This is just cosmetics, to make the dispersion graph look more beautiful.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Implemented model B14 in the relax library.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_library.  The code is raw implemented, with no optimisation.  This is merely to test, that the spin parameters that created R2eff data, can be found again after grid search and minimisation.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Correctly implemented the target function for model B14.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Implemented system test "relax -s Relax_disp.test_baldwin_synthetic -d" for model B14.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.  This proves that the model is correctly implemented, and return same data which the Baldwin script created.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Renamed the relax_disp.cpmg_frq user function to relax_disp.cpmg_setup and added some new options.  This follows from the thread http://thread.gmane.org/gmane.science.nmr.relax.devel/5511/focus=5520.  The ncyc_even option has been added so the user can specify if the pulse sequence requires an even number of CPMG blocks.  This is for use in the interpolated dispersion curves, but could have other uses in the future.
        * Removed model B14 to the list of MODEL_LIST_NUMERIC_CPMG.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.  This was not essential anyway.
        * Changed the default value of pA, the population for state A, to 0.95.  When doing a grid search in the auto-analysis, one can set "None".  This will then use default values specified for parameters, instead of a grid search.  pA is best to start at 0.95, than 0.5.
        * Extended system test Relax_disp.test_baldwin_synthetic to also include a N15 synthetic dataset.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Added the synthetic N15 data for system test Relax_disp.test_baldwin_synthetic.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Modified system_tests/scripts/relax_disp/cpmg_synthetic.py and the corresponding system tests.  Relax_disp.test_cpmg_synthetic_cr72.  Relax_disp.test_cpmg_synthetic_cr72_full_noise_cluster.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Attempt to implement function map_bounds in API for relax_disp.  Bug #22012 (https://gna.org/bugs/?22012): dx.map not implemented for pipe type relax_disp.
        * Expanded the 'CR72 full' dispersion model description in the manual to explain its origin.  This was discussed at http://thread.gmane.org/gmane.science.nmr.relax.devel/5410.  The equations used the Davis et al., 1994 simplified form, and this is now explained.
        * Changed float powers of 2.0 to integer powers of 2, to speed up the calculations.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This change did not do a large change in speed, but is more proper.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Changed all instances of "r2e" with "r20b", to be consistent with relax nomenclature.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Changed all instances of R2g with r20a.  This is to be consistent with the relax nomenclature.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Implemented g3 and g4 as square root functions instead of atan2.  atan2 is always returning values between -pi and pi.  https://docs.python.org/2/library/math.html.  Next step is to convert g1>-g1, which will truly follow the CR72 Nomenclature.  For this, the atan2 function is a blocker.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Had to lower the precision of system test Relax_disp.test_baldwin_synthetic.  This was after changing g3, and g4 from atan2 functions, to square root functions.  The model is still very precise though.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Altered the sign of g1, to follow CR72 Nomenclature.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Had to lower the precision of system test Relax_disp.test_baldwin_synthetic after sign change of g1.  The model is still precise, finding the parameters which generated the data.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Made g2 use the CR72 parameter convention.  No change detected, since the change will be erased by going to order**2.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Made sign change of deltaR2, to use parameter convention of CR72.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Implemented the alpha minus shorting from CR72.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty the code, making space between all multiplications "*".  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty up the code, making space between "=".  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty up the code, making space between all "-".  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty up the code, making space between all "+".  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * More code clean up.  Make it look pretty.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty up code, by moving comments up on line.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty up code.  Remove trailing spaces.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced expression with -alpha_.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced numpy.XX functions, with just the function.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced "power" with ncyc and made use of numpy power.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty up code, removing multiple "(" and ")".  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced Trel with relax_time, to use relax parameter conventions.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced pb and pa with relax parameter pA.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced keg with relax parameter normal use of k_BA.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced kge with k_AB, which is relax convention.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Removed where k_AB was subtracted with k_AB.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup of code, replacing repetitive calculations of dw**2.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup, by removing repetitive calculations of g3**2.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup, by removing repetitive calculations of g4**2.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Removed the specific API method aliasing in the pipe_control.opendx module.  The API object is now instead aliased as self.api.
        * Docsting fixes for some model_statistics() API methods, including the base class method.
        * Rewrite of the rotor2 CaM test data optimisation script.  This now handles the new rotor frame order model parameterisation.  Two functions have been added for converting between the old and new parameters - alpha_angle() to calculate the new alpha parameter and shift_pivot() for shifting the pivot to the closest point to the CoM on the rotor axis.
        * Changed how the rotor axis is calculated in the func_rotor() frame order target function.  A new set of notations is now being used to try to solve a nasty alpha angle parameterisation bug.
        * Updated the rotor2 CaM frame order test data optimisation script for the changed notation.  A new set of notations is now being used to try to solve a nasty alpha angle parameterisation bug.
        * Fixed the average position Euler angles for the rotor2 CaM frame order test data optimisation script.  The angles needed to be reversed.
        * Removed an duplicated chi2 printout in the rotor2 CaM frame order test data optimisation script.
        * Speedup - made B14 use the pre-calculated inverse time, instead of calculating the inverse time inside the function.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - moved the repetitive calculations of pB, k_BA and k_AB out of the library function.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - moved the calculation of deltaR2 and alpha_m out of library function.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Pretty-up code.  Re-ordered logic of r20 parameters, and exchange parameters in function call.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Moved Carver and Richards (1972) zeta and Psi notation outside library function.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  Not sure, if this speeds the calculation up.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - made variable for the repetitive calculations of zeta**2, and Psi**2.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - made "1" and "2" integers to float, to prevent Python conversion.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - repetitive calculations of 2.0 * tcp.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - moved g_factor: g = 1/sqrt(2) outside library function to be calculated once.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - repetitive calculations of sqrt_zeta2_Psi2 = sqrt(zeta2 + Psi2).  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup - converted expressions of complex(x, y) to (x + y*1j).  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Split the func_B14 into full, with a calc function.  This is to prepare for the splitting up of B14, into a full: R2a!=R2b, and "normal" which is r2a=r2b.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Documentation fix for CR72 calc function.
        * Renamed system test Relax_disp.test_baldwin_synthetic to Relax_disp.test_baldwin_synthetic_full.  And changed model from "B14" to "B14 full".  This is to help find where modifications now have to be changed.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Added B14_FULL to the lists of the specific_analyses.relax_disp.variables module.  The model name is stored in a special variable which will be used throughout relax.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.
        * Added B14_FULL to the relax_disp.select_model user function front end.  Added the model, its description, the equations for the analytic models, and all references to the relax_disp.select_model user function front end.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax##The_relax_disp.select_model_user_function_front_end.
        * Added B14_FULL to the target function.  The system test Relax_disp.test_baldwin_synthetic_full is now back and running.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Implemented system test Relax_disp.test_baldwin_synthetic for the model B14, whereby the simplification R20A = R20B is assumed.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Added target function for the Baldwin (2014) 2-site exact solution model for all time scales, whereby the simplification R20A = R20B is assumed.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Finished system test Relax_disp.test_baldwin_synthetic.  This proves that model B14 whereby the simplification R20A = R20B is assumed is successfully implemented.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Added the synthetic data for B14 model whereby the simplification R20A = R20B is assumed.  This is used in system test Relax_disp.test_baldwin_synthetic.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Added B14 and B14_FULL to the relax GUI.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * Added the latex bibliography reference for the model B14.  This is the reference for Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Added model B14 description in the manual.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Updated the references in the b14.py library file, to point to the wiki, and the future API and html documentation.  The link to API and html documentation is to be updated for the future compilation of these.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Reinserted the library function of b14.py the calculation of:  deltaR2 = r20a - r20b; alpha_m = deltaR2 + k_AB - k_BA; zeta = 2 * dw * alpha_m; and Psi = alpha_m**2 + 4 * k_BA * k_AB - dw**2.  And put the g_fact = 1/sqrt(2), inside the library function.  It made no sense to put these calculations outside the library, since there would be no skipping of a loop.  It actually makes much better sense to keep these calculation in the library function, to preserve the possibility to import this module in other software.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Removed the pre-calculation of "zeta2 = zeta**2" "Psi2 = Psi**2" since it did not speed-up things.  This power 2 of zeta and Psi is only done once.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Used LaTeX subequations instead, and using  R2eff parameter is defined in the relax.tex.  Using the defined \Rtwoeff, \RtwozeroA, \RtwozeroB, \kAB, \kBA, \kex.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Fixes for all URLs in the HTML version of the relax manual.  This fix will appear later at http://www.nmr-relax.com/manual/index.html once the next version of relax is released.  The trick was to translate the \url{} LaTeX commands which are not recognised by latex2html into \htmladdnormallink{#1}{#1} commands using a htmlonly environment in the headers.
        * The \bibitem command is no longer ignored when building the HTML version of the relax manual.  This will allow the bibliography at http://www.nmr-relax.com/manual/Bibliography.html to be formatted in a reasonable way.  And citations will have proper links to the entries in this file rather than the current behaviour of linking to itself, hence not going anywhere.
        * Apostrophe fix in the LaTeX bibliography file.  This will fix my name at http://www.nmr-relax.com/manual/Bibliography.html so that it is not displayed as dâ€™Auvergne.
        * Better latex2html support for the relax manual.  The hyperlink command \href{}{} and inline bibliographic reference command \bibentry{} are now supported in the HTML version of the relax manual.  These are translated into \htmladdnormallink{#2}{#1} and \citet{#1} command respectively, both of which are supported by latex2html.  This will significantly improve the documentation at http://www.nmr-relax.com/manual/index.html.
        * Made better notation of equation.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Changed manual, to the recipe at Appendix 1.  This was changed after the wish of the author.  Discussed in: http://thread.gmane.org/gmane.science.nmr.relax.devel/5632.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Changed that taucpmg = 1 / 4*nucpmg and not taucpmg = 1 / nucpmg.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Added model B14 to the list of dispersion models.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Relax manual fix for model TSMFK01.  Added that the model is slow exchange.
        * Fix for equation alignment for model B14.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Elimination of minus in library function b14.py.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced f0 with F0, to follow paper and relax manual.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced "ex0b" with "v1c" to follow paper and manual.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced "ex0c" with "v1s" to follow manual and paper.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced f2 with F2, to follow manual and paper.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Sqrt fix in manual for model B14.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Fix for ordering in calculation, to make it look prettier.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced "v2pPdN" with v5, to follow paper and manual.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced "oGt2" with "v4" to follow manual and paper.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Took inv_tcpmg outside parenthesis to follow manual.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Sign fix in manual.  The 1/taucpmg was taken wrong outside parenthesis.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced "t2" with "F1b" to follow paper.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Replaced "t1pt2" with "F1a_plus_b" for better reading.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Reorder of lines to follow appendix 1 in paper.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Rewrote lines to follow appendix 1 in paper.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Made expression according to appendix 1 in manual.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Replaced T_{\textrm{rel} with \taucpmg.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Very small speed-up.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Speedup by removing integer to float conversion part.
        * Better latex2html support for the relax manual, specifically the dispersion software comparison table.  The \yes and \no commands are now better processed as HTML, and the rotating package 'rotate' environment is replaced by nothing.  This will improve the dispersion software comparison table at http://www.nmr-relax.com/manual/Comparison_dispersion_analysis_software.html.
        * Fix for catastrophic parameter index error for model B14.  The model B14 would get the same parameter index as "B14 full", and would hence optimise wrong parameters.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Fix for model B14 making ugly graphs.  The power of ncyc has to be an integer.  Bug #22018 (https://gna.org/bugs/?22018): Model B14 creates ugly graphs ! Sig saw all over the place.
        * Fix for model B14 full making ugly graphs.  The power of ncyc has to be an integer.  Bug #22018 (https://gna.org/bugs/?22018): Model B14 creates ugly graphs ! Sig saw all over the place.
        * Fixes for the HTML version of the relax manual.  The renewal of the \theequation command in the model-free and relaxation dispersion chapters was causing all equation numbers in latex2html to be broken.  By placing these in a latexonly environment, the problem is avoided in the HTML version at www.nmr-relax.com/manual/.
        * Changed script for synthetic CPMG data.  This is to test the fitting of CR72 and B14, when creating R2eff data with numerical model: MODEL_NS_CPMG_2SITE_EXPANDED.  This script is ideal for testing cases.  One can readily define experiments settings: sfrq_X, time_T2_X, ncycs_X for simulating one or more spectrometer experiments.  Spins can readily be set up, to have different dynamics, like: r2, r2a, r2b, kex, pA and dw.  The script can test clustering, and can convert to Sherekhan and make a hyper-dimensional dx map to test Chi2 hypersurface on parameter settings.  It is also ideal for strees-testing relax, to see if its minimisation algorithm performs well.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Small improvement for generic CPMG data script file.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Added functionality of the visualising the spin dynamics point which generated the data.  This is to the script, which can visualize the synthetic CPMG data.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Fix for script for the visualising the spin dynamics point which generated the data.  This is to the script, which can visualize the synthetic CPMG data.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Fix for the file name writing of the point file.  Bug #22023: (https://gna.org/bugs/?22023) relax dx.map produce .net files which makes error.
        * Made system test Relax_disp.test_cpmg_synthetic_dx_map_points to start testing.  Modified also sample CPMG script to allow for this.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Modified user function dx.map to accept list of lists with values.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Added is_list_val_or_list_of_list_val to lib/arg_check.py.  This function is not yet done.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Added list_of_lists to user_functions/objects.py.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Added list_of_lists to uf_objects.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Made multiple writing of point files.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Added B14 to the dispersion software comparison table in the manual (docs/latex/dispersion_software.tex).  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Added B14 to the dispersion auto-analysis.  The B14 models will not create output files until this is done.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * Completely removed the list_of_lists argument.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Modified the description of making x,y,z points in the chi2 space for the user function dx.map.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Made solutions for math domain error.  Prevented to take log of negative values, and division by zero.  This though slows the implementation down.  System test Relax_disp.test_baldwin_synthetic_full went from 6.x seconds to 8-9.x seconds.  Sr #3154: (https://gna.org/support/?3154) implementation of Baldwin (2014) B14 model - 2-site exact solution model for all time scales.  This follows the tutorial for adding relaxation dispersion models at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Changed an 'align' environment to 'equation' as there was only one equation.
        * Removed invisible equations from the B14 dispersion model section of the relax manual.  The trailing "\\" were causing equation numbers to be produced on empty lines after the block of equations.
        * The f00 equation in the B14 dispersion model section of the manual is a single equation.  The 'subequations' and 'align' environments are therefore superfluous.
        * Modified dx.map to accept more than one point.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Added system test for the production of dx map.  Relax_disp.test_cpmg_synthetic_dx_map_points.  Task #7791: (https://gna.org/task/?7791) the dx.map should accept a list of list with values for points.
        * Added proper punctuation to the B14 dispersion model equations in the manual.  Equations should be readable as English sentences and they follow standard punctuation rules.  All of the equations in the B14 model section of the dispersion chapter have been updated to follow this.
        * Fixes for quotation marks in the B14 dispersion model section of the manual.  LaTeX requires `' for single quotes rather than ''.
        * Standardised the CR72 R2eff factor in the B14 dispersion model section of the manual.  This is now defined in the preamble of the LaTeX manuscript.
        * Converted all complex numbers 'i' in the B14 dispersion model section of the manual to \imath.
        * Removed some unnecessary {} brackets from the user manual.  This is for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.
        * The ncyc variable is now defined in the LaTeX preamble.  This is for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.
        * Fixes for some of the maths in the B14 model section of the dispersion chapter.
        * Fix for the arccosh operator in the B14 section of the manual.  This is for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.
        * Switched to using the LaTeX math symbol for real numbers \Re.  This is for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.
        * The Ncyc definition in the manual now uses a capital N.
        * The \arccosh LaTeX maths operator is now defined in the preamble of the manual.  This is used by the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.
        * Improved brackets for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.  The \left( and \right) command are used to produce brackets that scale to the size of the maths within these brackets.  One set of unneeded brackets were also removed.
        * Grammar fixes for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.
        * Added some text explaining why the B14 equations do not look like those of the paper.  This is for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter.
        * Small edits to the text of the B14 dispersion model section of the manual.
        * Replaced 'get' and 'got' with alternatives, as this verb is not to be used in formal English.  This is for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter of the manual.
        * Clean ups of the Carver and Richards descriptions.  This is for the B14 model (http://wiki.nmr-relax.com/B14) section of the dispersion chapter of the manual.
        * More basic editing of the text of the B14 dispersion model section of the manual.
        * The T_relax symbol is now defined in the preamble of the manual.  This is to standardise its usage in the dispersion chapter.
        * Major fix for the R2eff equations for the B14 dispersion model in the manual.  Here tau_CPMG, the time for one CPMG block, was mixed up with T_relax, the total time of all CPMG blocks.
        * Switched some 'v' symbols to '\nu' in the B14 dispersion model section of the manual.
        * Standardised the spacing in the equations for the B14 dispersion model in the manual.
        * Clean ups for the end of the B14 dispersion model section of the manual.  Here a number of 'v' were changed to \nu and the standard \kAB, \pA, and \pB are now used.
        * Some more tau_CPMG verses T_relax fixes for the B14 dispersion model equations in the manual.
        * Added some symmetry to the T equation in the B14 dispersion model section of the manual.
        * Latex2html fixes for the HTML version of the relax manual.  This is for the documentation at http://www.nmr-relax.com/manual/index.html.  Latex2html has problems determining if the contents of environments should added to the sub or superscript.  For example $1^\textrm{st}$ is not recognised and must be changed to $1^{\textrm{st}}$ for latex2html to function correctly.  Therefore these problems have been fixed throughout the manual.  The number of errors printed out by latex2html is now significantly less.
        * Shifted the model-free model equations for the HTML manual to the subequations environment.  This is for the relax manual at http://www.nmr-relax.com/manual/index.html  This is to preserve the equation numbering so that the HTML and PDF equation numbers match as closely as possible.
        * Fixes for the equation number in the HTML version of the manual.  This is for the relax manual at http://www.nmr-relax.com/manual/index.html.
        * Made collecting of min, max and median value of chi2, when creating the chi2 map.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Made the parsing of the min, max and median chi2 value to be used to define the chi2 hypersurfaces when writing the dx .net program.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Updated the latex2html HTML version to 4.1.  This is for the relax manual at http://www.nmr-relax.com/manual/index.html.
        * Removed the "remap" keyword in the dx.map function, since this is not in use.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Removed the keywords for "remap" in backend function, since this was not used.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Added the keyword "chi_surface" to the front-end dx.map function.  To set the chi2 surface level for the innermost, inner, middle and outer isosurface.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Added the chi_surface=None to the backend function.  When None, it will try to find reasonable chi2 values.  These will define surface levels for the innermost, inner, middle and outer isosurface.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Now saves all chi2 values, to better find reasonable chi level for the innermost, inner, middle and outer isosurface.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Made the standard values of chi2 surface be 10, 20, 50 and 90 percentile of all chi2 values.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Increased the precision of many of the Frame_order.test_rigid_data_to_*_model system tests.  This is to fix a test which was failing due to the recent re-parameterisation of the rotor frame order model to eliminate one parameter.  The precision of the numeric Sobol' sequence integration has been increased by shifting the fixed parameter values even closer to zero.  As a consequence, the chi-squared value of five of these tests is now lower.
        * Fix for system test Relax_dips.test_cpmg_synthetic_dx_map_points.  Removing keyword "remap", since this is not in use anymore.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Changed the import of percentile from lib.mathematics to lib.numpy_future.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Changed the percentage which is different in percentile from numpy_future.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Added lib/numpy_future.py.  This module is for implementing numpy function code from higher versions of numpy.  The relax dependencies listed at the download page of relax: http://www.nmr-relax.com/download.html#Source_code_release currently only requires numpy >= 1.0.4.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Added "numpy_future" to the __init__.py file in lib directory.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Moved numpy_future from lib to extern.  Extern is special package for external software or code that is bundled with relax.  Task #7792: (https://gna.org/task/?7792) make the dx.map write suggest chi surface values.
        * Updated synthetic CPMG data script.  This is to analyse complex dispersion data.  Related to bug #22021: (https://gna.org/bugs/?22021) model B14 shows bad fitting to data.  Bug #22024: (https://gna.org/bugs/?22024) minimisation space for CR72 is catastrophic.  The chi2 surface over dw and pA is bounded.
        * Added 4 unit tests for the lib.geometry.lines.closest_point_ax() function.  This relax library function was previously not being checked in the test suite.
        * Modified the rotor2 CaM frame order test data optimisation script to optimise the pivot.  Print statements has been added for comparing the optimised to the original pivot.  The rotation axis is now also only created once, as it is now used in three places in the script, hence the two functions for converting parameters to the new parameterisation have been updated.
        * Modified the rotor2 CaM frame order test data optimisation script to compare the rotor axes.  The optimised rotor axis is recreated with the lib.frame_order.rotor_axis.create_rotor_axis_alpha() function, and then the original and optimised axes are compared.  The state.save user function has been shifted forwards in the script to avoid a later RelaxError.  The log file, average position PDB file, and state file from running the script have been added to the repository or updated.
        * Removed the domain rotation code from the pymol.cone_pdb user function backend.  This should only display the cone PDB object.  The domain rotation is now performed by the far more powerful frame_order.pdb_model user function.
        * Created the Status_object.test_install_path system verification test.  This is to catch bug #22037 (http://gna.org/bugs/?22037), the failure to load graphics in the GUI due to the relax installation path not being set up correctly.
        * Started to create a chapter for the N-state model or ensemble analysis in the manual.  This simply consists of a few introductory sections and the phathalic acid graphic.
        * Spacing improvements in the stereochem_analysis.py N-state mode sample script.
        * Docstring improvements for the stereochem_analysis.py N-state model sample script.  The paragraphs are now all on one line and 'Q-factor' has been changed to 'Q factor'.
        * Replaced 'Q-factor' with 'Q factor' throughout the relax codebase.  This change to the correct notation covers code, comments, and docstrings.
        * Added a new section for the stereochemistry analysis to the N-state model chapter of the manual.  This is just an initial introduction and an inclusion of the sample script.
        * Editing of the auto_analyses.stereochem_analysis module docstring.  The line wrapping to 100 characters has been removed.
        * Exampled the stereochemistry analysis section of the N-state model chapter of the manual.
        * Advances to the Grace 2D plotting abilities in the lib.software.grace relax library module.  The write_xy_header() function now accepts the new 'world', 'tick_major_spacing', and 'tick_minor_count' arguments.  These allow the world view to be preset, and allow the ticks on the X and Y-axes to be programatically changed.  The write_xy_data() has also been modified so that the autoscaling can be turned off, as this Grace command will overwrite the world view and tick setup.
        * Improvements for the 2D Grace plots created by the rdc.corr_plot user function.  The autoscaling is now turned off, as the data set representing the diagonal (with points [-100, -100] and [100, 100]) causes the world view to be set to be between -100 to 100 or -200 to 200.  The world view is set to be between -50 and 50 Hz, so that all RDCs should be visible.  The ticks in the plot have also been set so that the minor ticks are at every Hz increment.
        * The units are now included in the Grace axis labels created by the rdc.corr_plot user function.
        * Added the 'title' and 'subtitle' arguments to the rdc.corr_plot user function.  This allows the defaults to be overridden with user supplied titles and subtitles.
        * The rdc.corr_plot and pcs.corr_plot user function now use the Grace icon in the GUI.
        * Created the new pymol.frame_order user function.  This user function pairs with the frame_order.pdb_model user function, taking the three PDB files created and displaying them nicely.  Neither user function is complete, however the rotor representation of certain frame order models is handled correctly.
        * Created a script for finding all dead http://www.nmr-relax.com links in files of a directory tree.
        * Created the Structure.test_bug_22041_atom_numbering system test to catch bug #22041.  This was reported at https://gna.org/bugs/?22041.  The problem is that the structure.write_pdb user function does not create the correct atom serial numbers.
        * Modified the frame_order.pdb_model user function so that the three PDB files are optional.  This allows only certain components of the frame order theory to be represented in PDB format.
        * Improvements for the rotor PDB representation shown by the pymol.frame_order user function.  The stick radius width change is now only for the rotor PDB object, and not everything in PyMOL.
        * Modified the 2nd rotor model of CaM frame order optimisation script.  The frame_order.pdb_model user function is now used to create a PDB representation of the rotor motions for the real, expected parameters and for the optimisation results when the pivot point is fixed.  In addition, the pymol.cone_pdb user function has been replaced by the pymol.frame_order user function.  All new files have been added to the repository.
        * Added a relax script for creating a PDB representation of the original pivot point.  This is for the 2nd rotor model of CaM frame order in the test suite.  The resultant PDB file has been added to the repository.
        * Modified the pivot point PDB representation script to include the shifted pivot.  This is for the 2nd rotor model of CaM frame order in the test suite.
        * Added the 'centre_type' argument to the structure.superimpose user function.  This allows the default 'centroid' superimposition to be replaced by a centre of mass (CoM) superimposition instead.  As the CoM and centroid position do not match, the translation vector and Euler rotation angles will be different.
        * Exposed the backend verbosity flag of the structure.read_* user functions.  This allows the user to silence these user functions, which can be very useful when loading many 3D structures in the scripting UI mode.  This change is for the structure.read_gaussian, structure.read_pdb, and structure.read_xyz user functions.
        * Expanded the structure.delete user function to add the 'verbosity' and 'spin_info' arguments.  The verbosity argument, when set to zero, allows all output to be suppressed.  The spin_info flag allows the deletion of spin and interatomic data to now be turned off, so that only 3D data is deleted.
        * The new structure.delete 'verbosity' argument is now propagated into the structural object.  This allows the printouts to now be completely suppressed.
        * The structure.read_* user function 'verbosity' argument is now passed into the structural object.  This allows another printout to be silenced.
        * The structure.read_* user function 'verbosity' argument is now passed into lib.io.open_read_file().  This allows all printouts from these three user functions to be suppressed.
        * Converted the Mf.test_opendx_s2_te_rex system test into a GUI test.  This is to demonstrate bug #22035 (https://gna.org/bugs/?22035), the dx.map user function being broken in the GUI.
        * Python 3 fixes for the extern.numpy_future module.  These changes are necessary to allow relax to even run.
        * Python 3 fixes for all of the relax code base.  The lib.compat and multi.processor module changes were fatal, not useful for Python 3, and hence reverted.
        * Python >= 3.2 fix for the Relax_disp.test_sod1wt_t25_to_sherekhan_input system test.  The B0 field value of the ShereKhan input files created by the relax_disp.sherekhan_input user function was formatted as "%s".  However in Python >= 3.2, floats are now converted to have 14 decimal places whereas previous Python versions only had 10 places.  The user function backend now forces only 10 decimal places to be written to the input files.


    Bugfixes:
        * Fix for bug #21814 (https://gna.org/bugs/?21814).  This is the PDB reading failure when the PDB records are not padded to 80 spaces.  The fix is simple, all PDB records are pre-validated.  This includes removing all newline characters and padding each PDB record to 80 spaces when needed.  This will however add an overhead cost -- the internal PDB reader will now be slower.  However corrupted PDB files, produced by MODELLER for example, not padded to 80 spaces will now be better supported.
        * Bug fix for all of the R1rho relaxation dispersion models.  The atan2() function is now being used rather than atan() for determining the rotating frame tilt angle.  This is to allow the angle to be in the correct quadrant - i.e. to have a sign or direction.
        * Huge speed up of the interatom.define user function.  This is to fix bug #21862 (https://gna.org/bugs/?21862), the freezing up of relax when using the dipolar relaxation button in the model-free auto-analysis in the GUI.  This involves a number of changes.  The algorithm for the backend of the interatom.define user function has been broken into two separate parts.  The first part is new and uses the internal structural object atom_loop() twice for each spin ID string.  This then calls the new are_bonded_index() structural object method which uses atom indices to find if two atoms are bonded, as the atom indices are returned from the atom_loop().  The are_bonded_index() is orders of magnitude faster than are_bonded() as selection objects are not used and the bonded data structure can be directly accessed.  The are_bonded() method has also been slightly speed up by improving its logic.  The second part is to perform the original algorithm of two nested spin loops over each spin ID and using the are_bonded() structural method.  This second part only happens if the first part finds nothing.  The structural object atom_loop() method has been modified to be able to return the molecule index.  These indices are needed for the new are_bonded_index() method.  When running relax with the profile flag turned on, a simple script which loads the 'Ubiquitin2.bz2' saved state and then the "interatom.define(spin_id1='@N', spin_id2='@H', direct_bond=True)" user function decreases from a total time of 143 to 3.8 seconds.  However there are no speed changes detectable in the relax test suite - on one computer the system, unit and GUI tests only only vary by a fraction of a second.
        * Fix for the NOE analysis for the peak intensity parameters.  This relates to bug #21863 (https://gna.org/bugs/?21863), the grace.write user function not being able to write ref/sat plots as described in sample script noe.py.  The 'ref' and 'sat' parameters have been replaced by the 'intensities' dictionary data structure a long, long time ago.  Therefore they have been eliminated and replaced by the 'intensities' definition.
        * Fixes for the definitions of the N-state model analysis parameters.  This analysis does not use the CSA value, and the paramagnetic centre is a list, not a float.
        * Fixes for the definitions of the 'theta' and 'w_eff' relaxation dispersion parameters.  These should not be manually changed by the user and they are not optimised parameter.  Therefore they have been shifted from the set 'params' to the set 'all', to avoid listing them in the parameter tables (for example in the value.set user function).
        * Fixes for the frame_order.pivot user function - the model parameters were not being updated.  The update_model() function is now called to make sure that the pivot point is either added or removed from the list of model parameters.
        * Fix for bug #21924 (https://gna.org/bugs/?21924).  This is the failure to output 2D Grace plots for the R20, R20A, R20B, and R1rho0 relaxation dispersion parameters.  A simple test for missing data fixed the problem.
        * Fix for the Relax_disp.test_korzhnev_2005_15n_sq_data system test for certain MS Windows systems.  This was reported as sr #3142 (http://gna.org/support/?3142).  The problem was simply the lower precision of this system.
        * Fix for the cpmg_analysis.py relaxation dispersion sample script.  This was reported as sr #3142 (http://gna.org/support/?3142).  The problem was that one of the paths was in the Linux/Unix format and hence if the path is not changed by the user, then the script will not work for them if they are using MS Windows or Mac OS X.
        * More path fixes for the sample scripts to allow them to run on MS Windows and Mac OS X.  This is for the relaxation dispersion R1rho_analysis.py script and the N-state model conformation_analysis_rdc+pcs.py script.  These scripts should be modified by the user for their own data, so they should not encounter this problem when using the scripts normally.
        * Python 3 fixes throughout the codebase.
        * Python 3 fix for the Library.test_library_independence software verification test.
        * Python 3 fix for the Relax_disp.test_kteilum_mhsmith_eschulz_lcchristensen_gsolomentsev_moliveberg_makke_sod1wt_t25_to_cr72 system test.  The xrange builtin function does not exist in Python 3.
        * Python 3 fix for the Relax_disp.setup_sod1wt_t25 system test.  The xrange builtin function does not exist in Python 3.
        * Updated the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test for the recent changes.  This is for fixing bug #21960 (https://gna.org/bugs/?21960).  The chi-square values are different due to the fix for bug #21954, the peak intensity error analysis bug, and the CR72 model (http://wiki.nmr-relax.com/CR72) results are different due to the fix for bug #21953, the change of the kex values used in the grid search.
        * Fix for the relax_disp.select_model user function for when the C modules are not compiled.  This was checking for the presence of the compiled C modules whenever the 'R2eff' model was specified.  However this behaviour is incorrect.  It should only check for the C modules if exponential curves are to be fit.
        * Fix for bug.  The variances used to calculated std, should only be taken from those which are defined in the subset.  Regarding bug #21954, (https://gna.org/bugs/?21954) - order of spectrum.error_analysis is important.
        * Fix for system test Relax_disp.test_hansen_cpmgfit_input.  Bug #21989: (https://gna.org/bugs/?21989) - relax_disp.cpmgfit_input does not work for model CR72.  The looping was performed over the file lines instead of the defined fixed lines.  The output files is truncated, and does not contain the wished data.
        * Fix for "offset" and "point" swapped in looping.  Bug #21989: (https://gna.org/bugs/?21989) - relax_disp.cpmgfit_input does not work for model CR72.
        * Fix for bug #21990, the --log and --tee options not functioning with the test suite.  The bug report is at https://gna.org/bugs/?21990.
        * Fix for bug #21970 (http://gna.org/bugs/?21970).  The Mac OS X dmg file required one of the test_suite/shared_data directories included in the 'include' list to properly bundle all relax modules inside the Mac App framework.  This was achieved by creating a whitelist structure and adding the directory to that.
        * Fix for bug #21984 (https://gna.org/bugs/?21984), the numpy.float16 error.  The numpy.float16 type is not defined for all numpy versions.  Therefore the lib.check_types.float16 type is used instead as this defaults to numpy.float32 when numpy.float16 is missing.
        * Fix for the relax_disp.parameter_copy function.  The median of the values was not performed properly, since 0.0 was already in the starting list of values.
        * Fix for the relax_disp.parameter_copy user function description.  The parameters are not averaged but instead the median value from all spins is taken.
        * Fix for bug #22001, the execution of script changing the current working directory.  This is reported at http://gna.org/bugs/?22001.  The changing of the current working directory (CWD) was added to allow for nested scripting.  However this is no longer needed as the script import mechanism has changed from the exec() function call to the runpy Python module.
        * Fix for bug #22002, the failure of the Library.test_library_independence software verification test.  This is reported at https://gna.org/bugs/?22002.  The fix was simply to use the relax installation path in the status singleton object to make sure that the relax 'lib' directory can be found independently of what the current working directory is.
        * Fix for path to sample data in sample script: sample_scripts/relax_disp/cpmg_analysis.py.
        * Fix for path to sample data in sample script: sample_scripts/relax_disp/R1rho_analysis.py.
        * Fix for bug #22004, the conformation_analysis_rdc+pcs.py N-state model sample script not working.  This is reported at https://gna.org/bugs/?22004.  The problem was that the return_api() function call needed to be after the creation of the data pipe.
        * Fix for the local_min_search.py N-state model sample script.  The return_api() function call was preformed too early.  Instead of placing it after the data pipe creation, the specific analysis type is now directly specified.
        * Fix for type in the eta scale of CR72 model.  The calculation in relax was correct, but the scale of eta has been wrong in the documentation.  This was discussed in: http://thread.gmane.org/gmane.science.nmr.relax.devel/5506.  The B14 model is explained in: http://wiki.nmr-relax.com/B14.
        * Bug fix for taking the median if there is more than 0 values in the list.  Bug #22010 (https://gna.org/bugs/?22010): relax_disp.parameter_copy return a list of pA, if copying only for one spin.
        * Fix for the dispersion model_statistics() specific API method.  The spin ID argument should override the model_info argument.  The method now correctly implements this.
        * Fixed the rotor axis direction in the lib.frame_order.rotor_axis module.  The normalisation code has also been simplified.
        * Fix for tabular space and forgotten "\n" when writing dx.maps config files.  Bug #22023: (https://gna.org/bugs/?22023) relax dx.map produce .net files which makes error.
        * Added another sentence telling the user that multiple field relaxation data is essential.  This is for the model-free dauvergne_protocol auto-analysis section of the relax manual and relates to bug #21799 (https://gna.org/bugs/?21799).
        * Another sentence about multiple field relaxation data added to the manual.  This is for the model-free dauvergne_protocol GUI section of the relax manual and relates to bug #21799 (https://gna.org/bugs/?21799).
        * Documentation fix for IT99.  Changed kex to tex.  Still needs to be changed at homepage: http://www.nmr-relax.com/analyses/relaxation_dispersion.html#IT99.  Bug #22019: (https://gna.org/bugs/?22019) the IT99 model is listed with parameter kex instead of tex.
        * Documentation fix for IT99.  Changed kex to tex in user function.  Bug #22019: (https://gna.org/bugs/?22019) the IT99 model is listed with parameter kex instead of tex.
        * Small extra explanation in auto analysis.  Bug #21799 (https://gna.org/bugs/?21799): Insufficient recommendations/warning message for the execution of dauvergne protocol with 1 field is incomplete.
        * Big bug fix for the relax installation path determination.  This is to fix bug #22037 (http://gna.org/bugs/?22037), the failure to load graphics in the GUI due to the relax installation path not being set up correctly.  The problem is that the status module was looking for the compat.py file to determine where the base directory is, but this file has been moved into the lib/ package.  Now the dep_check.py file is being searched for.
        * Fixed the description of the N-state model in the pipe.create user function.  This has nothing to do with domain motions - it is the treatment of ensembles of structures.
        * Fix for the axis labels in the rdc.corr_plot user function when T data is converted to D.
        * Fix for bug #22039, the printing out of Dpar twice by the diffusion_tensor.display user function.  This is reported at https://gna.org/bugs/?22039.  The solution is given in the original bug report.
        * Fix for bug #22041, the PDB atom serial number error from the structure.write_pdb user function.  This was reported at https://gna.org/bugs/?22041.  The problem is that the structure.write_pdb user function preserves the atom numbering from the original structure and uses that for the atom serial number.  However the atom serial number must be replaced with sequential values to produce a valid PDB file.  This is fatal for any CONECT records.
        * Fix for the chain-reaction failures in the test suite.  This fixes bug #22055 (https://gna.org/bugs/?22055), the processor.run_queue() not cleaning up in uni_processor - chain-reaction failures in the test suite.  The fix was insanely simple, just implementing what was mentioned Gary Thompson's FIXME comment in the run_queue() method of the uni-processor object.  The queue execution code has been placed inside a 'try' statement and the queue cleaning up code in a 'finally' statement.  This closes a painfully difficult to find bug that has been in relax since 2006, though only affecting relax developers.



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

    Features:
        * Large amounts of new infrastructure for the R1rho relaxation dispersion analysis type.
        * More hardware information printed out when using the '--info' command line option.
        * The user function relax_disp.write_disp_curves now produces text files of R2eff verses the rotating frame tilt angle theta.
        * Small improvements for the relaxation dispersion GUI tutorial and citation chapter of the relax manual.


    Changes:
        * Added text file for the articles reference values from the global fit in Relax_disp.test_r1rho_kjaergaard.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  This is from optimisation of the Kjaergaard et al., 2013 Off-resonance R1rho relaxation dispersion experiments using the 'DPL' model.  This uses the data from Kjaergaard's paper at DOI: http://dx.doi.org/10.1021/bi4001062.
        * Replaced "_" with "-" in text file with global fit residues.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Sorted the reference values in residue order.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added reference data and guess data for a global fit R1rho analysis.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  This system test is setup comparison with paper values, and will be turned off later to prevent long running time.
        * Redid dict() keys for unit test of find_intensity_keys(), to pass on Python 3.2 and 3.3.  Work in progress for Bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  This is a response to message: http://thread.gmane.org/gmane.science.nmr.relax.devel/5132.
        * Added ":" to dictionary keys to match return from spin_loop in system test Relax_disp.test_r1rho_kjaergaard.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Removed model 'No Rex' to be tested in system test Relax_disp.test_r1rho_kjaergaard.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Aliased spins in system test Relax_disp.test_r1rho_kjaergaard.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Set opt_func_tol = 1e-15 and opt_max_iterations = 100000 to run system test Relax_disp.test_r1rho_kjaergaard faster.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Re-ordered code lines in system test Relax_disp.test_r1rho_kjaergaard.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Assigned guess values for system test Relax_disp.test_r1rho_kjaergaard.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added a section at the start of the dispersion GUI analysis tutorial about 'computation time'.  This is for the dispersion chapter of the manual.
        * Removed alias of spins in system test Relax_disp.test_r1rho_kjaergaard.  Work in progress for Bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added fitted R1 values from paper to system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This will be used to test the output of calculating Omega_eff, as stated in http://article.gmane.org/gmane.science.nmr.relax.devel/5148.
        * Added reading of R1 values in system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added full manual steps of analysis for system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Modified the directory separator from "/" to os.sep in system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Commented out the commands for writing of text files and state files to speed up system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added the testing of writing out theta values in system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added the parameter "theta" to specific_analyses/relax_disp/api.py.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Modified parameter py_type to dict() for the theta value.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added parameter "theta" do description tables.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Made an assertion that spin contains attribute "theta" in system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added unit test for return_offset_data.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This is development according to thread http://thread.gmane.org/gmane.science.nmr.relax.devel/5157.
        * Commented out the expectation of the attribute "theta" to exist in system test Relax_disp.test_r1rho_kjaergaard.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Imported return_param_key_from_data to be used in unit test return_offset_data.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * The relax information printout, from "relax -i" for example, now includes detailed CPU information.  This uses operating system specific commands to obtain this information which is not available from the platform Python module.
        * Removed the dependence on subprocess.check_output() as this is only for Python 2.7 and higher.  This is for the relax information printout about the CPU info recently introduced.
        * The RAM in the relax information printout is now displayed for Mac OS X.  The 'sysctl' command is now being used to retrieve the RAM size and total memory, and the swap is calculated as the difference.
        * Added the OMP relaxation rates and compressed PDB file to the repository.  This is to allow users to have a full data set to perform a test model-free analysis with.
        * Added a sample_script to generate theta values for R1rho data.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  The script is explained at the wiki: http://wiki.nmr-relax.com/Sample_scripts.relax_disp.return_offset_data.
        * Created a new citation for relax which concatenates both the d'Auvergne and Gooley 2008 papers.  This is to show to those who are unaware of back-to-back paper concatenation rules how to cite both papers using one reference, saving a lot of space.
        * Added lib.rotating_frame module containing functions related to rotating frame NMR calculations.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added rotating_frame to lib.__init__.py.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added unit test file _lib.test_rotating_frame.py to __init__.py.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added unit test file _lib.test_rotating_frame().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  These unit test will be used to calculate and return dictionaries of tilt_angles, Delta_omega and omega_eff.  Some of the R1rho data mentioned in: http://www.nmr-relax.com/manual/Dispersion_model_summary.html.
        * Added link to manual for calculating NMR parameters in the doctring for lib.rotating_frame.py.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Renamed function "calc_tilt_angle" to "calc_rotating_frame_params" in lib.rotating_frame.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This is to reflect, that the function should return and store spin values of both tilt_angles, Delta_omega and omega_eff.
        * Replaced with calc_rotating_frame_params in unit test, to reflect function renaming.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Improved docstring in lib.rotating_frame.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Rearranged the citations in the citations chapter.  The references for relax are now far more prominent.
        * Implemented the return of Delta_omega = "average resonance offset in the rotating frame" in specific_analysis.relax_disp.return_offset_data.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Fixed unpacking of return from function calls of return_offset_data.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Made specific_analysis.relax_disp.return_offset_data return "w_eff" - the effective field in rotating frame in rad/s.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Fixed unpacking of return from function calls of return_offset_data, since w_eff is now also returned.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Moved calc_rotating_frame_params() to specific_analysis.relax_disp.disp_data.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This is in a response to message: http://www.mail-archive.com/relax-devel@gna.org/msg05080.html.
        * Started unit test for _specific_analysis._relax_disp.test_disp_data.test_calc_rotating_frame_params.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This is in response to message: http://www.mail-archive.com/relax-devel@gna.org/msg05080.html.
        * Removed lib.test_rotating_frame.py and the associated unit test.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This is in response to http://www.mail-archive.com/relax-devel@gna.org/msg05080.html.
        * Made calc_rotating_frame_params take spin "The spin system specific data container" as input.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Modified calc_rotating_frame_params() to operate on the level of spin container and ID.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Modified unit test test_calc_rotating_frame_params to use spin container and ID in test.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Epydoc docstring fix for the Structure.test_bug_21522_master_record_atom_count system test.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/index.html.
        * Epydoc docstring fix for the SetValue() method of the File input GUI element.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/index.html.
        * Removed the test_suite/shared_data directory from the API documentation scanning.  This is to avoid trying to import the frame order relax scripts which cannot be imported into Python.
        * Added epydoc information about dimensions for w_e in function return_offset_data.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added verbosity flag to calc_rotating_frame_params() to allow switching of print information.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added unit test for use of value.write to write theta values calculated from calc_rotating_frame_params().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Extended unit test for use of value.write to write intensities file.  This is to test that changing of the API function will retain its function.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Replaced API function in specific_analysis.relax_disp.api to calculate and return values for parameter theta when this is requested.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Implemented according to http://www.mail-archive.com/relax-devel@gna.org/msg05082.html.
        * Extended API function in specific_analysis.relax_disp.api to calculate and return values for parameter theta when this is requested.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Implemented according to http://www.mail-archive.com/relax-devel@gna.org/msg05082.html.
        * Variable renaming and closing of files in unit test test_value_write_calc_rotating_frame_params().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Extended unit test test_value_write_calc_rotating_frame_params() to also test writing of w_eff values.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Fixed typo and removed grace string for parameter description of theta.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added parameter 'w_eff', the effective field in rotating frame calculation to dispersion API.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added handling of calculating w_eff in dispersion API.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added unit to parameter description of theta and w_eff.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Fix for field count and added check for R1rho type in calc_rotating_frame_params().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added grace string to parameter description of theta and w_eff.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Fixed code duplication in relax_disp API, for calculation of theta and w_eff.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Removed unused lines of code in unit test test_return_offset_data().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Moved unit test of value writing of calc_rotating_frame_params() into separate system tests.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added system test Relax_disp.test_value_write_calc_rotating_frame_params_auto_analysis().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This is to test the auto_analysis value.write function to write theta and w_eff values for an R1rho setup.
        * Added writing of parameters theta and w_eff for an auto-analysis if model in MODEL_LIST_R1RHO_FULL.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added return of None values for function calc_rotating_frame_params() if spin is not selected.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Extended system test Relax_disp.test_value_write_calc_rotating_frame_params_auto_analysis() to test the writing of theta values.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Hardcoded the writing of R2eff as function of the tilt angle Theta, when using the user function relax_disp.write_disp_curves.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  Theta values per spin will be written if the spin.model is in the list MODEL_LIST_R1RHO_FULL.
        * Fix for return of None tuple in calc_rotating_frame_params().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Fix for correct use of assertNotEqual or assertEqual in Relax_disp system tests.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Hardcoded contents of writing of parameters theta and w_eff in system test Relax_disp.test_value_write_calc_rotating_frame_params_auto_analysis().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This is to better support testing of key ordering and different architectures, etc.
        * Fixed code duplication in specific_analysis.relax_disp.disp_data.write_disp_curves().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Modified system test of hardcoded values of theta and w_eff to match precision to 14 digits.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Fix for handling the writing of theta.out and w_eff.out in relax_disp auto_analysis, when model is not of R1rho type.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This was discovered using the system tests.
        * Fix for calculating the theta angle describing the tilted rotating frame relative to the laboratory, when omega1 / Delta_omega is negative.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This follows discussion in: http://thread.gmane.org/gmane.science.nmr.relax.devel/5205.
        * Modified unit and system test to reflect new calculation of rotating frame tilt angle Theta.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.  This was discussed in thread: http://thread.gmane.org/gmane.science.nmr.relax.devel/5205.
        * Added interpolation calculation of theta and w_eff, when dispersion points are interpolated.  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.
        * Added printout of Omega, the average resonance offset, in calc_rotating_frame_params().  Regarding sr #3124, (https://gna.org/support/?3124) - Grace graphs production for R1rho analysis with R2eff as function of Omega_eff.


    Bugfixes:
        * Typo fix for text in the model-free GUI auto-analysis.  The maximum iterations for the protocol was misspelled in the GUI.  This was spotted by Hessam Nasrollah.
        * Fix for one of the frame order system tests when using the Mac OS X application binary.  The problem was that the 'shared_data' directory could not be found as it was not included in the test_suite package __all__ list.
        * Fix for bug #21754 (https://gna.org/bugs/?21754).  This is the failure of the grace.view user function on MS Windows in opening a file in qtgrace when the path includes spaces, as reported by Mengjun Xue (mengjun dott xue att mailbox dott tu-berlin dott de).  The fix was to run the program with the file name in double quotes.
        * Fix for bug #21763 (https://gna.org/bugs/?21763).  This is the problem of the chi2 value not being visible in the parameter list of the grace.write and value.write user functions in the GUI.  The problem was that when asking for the parameter name list, the minimisation parameters were not being asked for.



Version 3.1.6
(28 February 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.1.6

    Features:
        * Full support for PDB chain IDs in the internal structural object.
        * Improvements for the devel_scripts/python_seek.py for finding all installed Python versions and modules.  Individual modules can now be specified on the command line.
        * The pedantic command line option -p, --pedantic has been renamed to -e, --escalate.
        * The new prompt command line option -p, --prompt causes the relax prompt mode to launch after running a script to allow relax to be inspected interactively.
        * Better organisation of the relax command line options into groups, as shown by running 'relax -h'.
        * A tutorial for using the relaxation dispersion analysis in the GUI has been added to the manual.  This includes step-by-step instructions with many screenshots.
        * Improvements to the manual including better and consistent line breaking for the GUI menu item text, user functions, file and directory paths, and Python module paths.
        * The spectrum.read_intensities user function can now load multiple files simultaneously, allowing for simplified use in the GUI.
        * Addition of a new GUI window element for loading multiple files.
        * Improvements to the sequence data input GUI window including the item count being displayed and a 'Delete' button to remove the last element.
        * Improvement for the relaxation dispersion auto-analysis - the names of the automatically created data pipes are now unique by appending the name of the data pipe bundle to the end.  This allows multiple dispersion auto-analyses to exist simultaneously in the GUI or within one relax state file.
        * The relaxation dispersion analysis now handles deselected spins.
        * Improved colour coding of relax log messages in the relax manual.
        * The relaxation dispersion auto-analysis now creates the chi2.out text file.  This is for more easily comparing the chi-squared values between analyses.


    Changes:
        * Converted the chain ID list in the internal structural object to the CHAIN_ID_LIST module variable.
        * The internal structure object method _pdb_chain_id_to_mol_index() now uses the CHAIN_ID_LIST string.  This allows for the full PDB chain ID range to be supported.
        * Small improvement for the devel_scripts/python_seek.py script.  The list of detected Python binaries files are now sorted prior to determining the installed modules.
        * Updated the N_state_model.5_state_xz system test to allow it to complete on i586 Linux systems.  The optimisation would continue for a huge amount of time on a test system (Mageia 4 i586 VM) and would make it appear as though the test suite has hung.  By limiting the maximum number of iterations in the optimisation to 1000, the test will complete successfully and the parameters optimised to the same precision.
        * Loosened the checks for the Frame_order.test_korzhnev_2005_15n_zq_data system test.  This is to allow the test to pass on a 32-bit test system (Mageia 4 i586 VM).
        * Decreased the accuracy of the Relax_disp.test_korzhnev_2005_15n_dq_data system test.  This is to allow the test to pass on a 32-bit test system (Mageia 4 i586 VM).
        * Decreased the precision of the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  This is to allow the test to pass on a 32-bit test system using Python 2.5 and Python 3.1 (Mageia 4i586 VM).
        * Decreased the precision of the Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff system test.  This is to allow the test to pass on a 32-bit test system using Python 2.5 and Python 3.1 (Mageia 4i586 VM).
        * Decreased the precision of the Relax_disp.test_hansen_cpmg_data_to_cr72 system test.  This is to allow the test to pass on a 32-bit test system using Python 2.5 and Python 3.1 (Mageia 4i586 VM).
        * Fix for the test_suite/system_tests/scripts/noe/bug_21562_noe_replicate_fail.py system test script.  There was some invisible binary junk at the start of the file which as causing the Noe.test_bug_21562_noe_replicate_fail system test to fail, as the script could not load.  This was only affecting one 32-bit test system using Python 3.1 and Python 3.2 (Mageia 4 i586 VM).
        * Fixes for the unit tests of the package __all__ lists for Python 3.  When Python 3 generates byte-compiled *.pyc files, these are stored in __pycache__ directories.  These directories are now skipped for the package content unit tests, allowing the test to pass.
        * Loosened the checks of some of the Relax_fit system tests.  These are the Relax_fit.test_curve_fitting_height and Relax_fit.test_curve_fitting_volume system tests.  The minor change is required to allow the tests to pass on a 32-bit system with Python 3.3.3.
        * The python_seek.py development script now allows the modules to be specified on the command line.  This speeds up the script and allows individual modules to be checked and the version displayed.
        * Added a copyright notice to the python_seek.py script.  The descriptive text has also been converted into a docstring.  The copyright is simply to show who wrote the script and how old it is.
        * The python_seek.py script can now check for the ancient Numeric module.
        * The python_seek.py script can now check for the ancient Scientific module.
        * The python_seek.py now lists the Python version again (broken in the last few commits).
        * The python_seek.py script now accepts the 'all' argument to display all modules supported by the script.
        * Output formatting improvements for the python_seek.py development script.
        * Changed the module ordering in the python_seek.py development script.
        * Epydoc docstring fix for the pipe_control.structure.main.load_spins() function.
        * Created the Mf.test_bug_21615_incomplete_setup_failure GUI tests.  This is designed to catch bug #21615 (https://gna.org/bugs/?21615) as reported by Ivan Leung (ivanhoe dott leung att chem dott ox dot ac dot uk).  Included are the data files Ivan attached to the bug report truncated to two residues.  The GUI test follows exactly the steps outlined by Ivan.
        * Deleted the ancient, unused 'quit' argument of the relax interpreter object.  This code was identified in a post by Troels Linnet at http://thread.gmane.org/gmane.science.nmr.relax.devel/5000/focus=5003.  This argument never worked correctly and has not been used for many, many years.  Many code paths in relax needed to be updated to remove the argument.
        * Shifted the pedantic flag to escalate flag.  The option -p would instead be used for the option --prompt.  Fix for sr #3117, (https://gna.org/support/?3117) - Functionality to inspect interactively after running script - The equivalence to python -i.
        * Added the -p --prompt option for running a relax script and inspect interactively.  Fix for sr #3117, (https://gna.org/support/?3117) - Functionality to inspect interactively after running script - The equivalence to python -i.
        * Modified the help text to explain that -p will launch relax in prompt mode after running any optionally supplied scripts.  Fix for sr #3117, (https://gna.org/support/?3117) - Functionality to inspect interactively after running script - The equivalence to python -i.  This is to allow the -p --prompt option to be given without a script.  relax should support this so that a user doesn't get too confused when trying to start in prompt mode with the --prompt flag and support the --prompt argument without a script being supplied.
        * Finished implementing the functionality of interacting with variables after executing a script.  Fix for sr #3117, (https://gna.org/support/?3117) - Functionality to inspect interactively after running script - The equivalence to python -i.  For getting access to variables after executing a script, the variable should be saved under: cdp.X, where X define a container.  The name space issue is discussed in: http://thread.gmane.org/gmane.science.nmr.relax.devel/5012.
        * Organisation of the relax command line options into distinct groups.  This follows from the message at http://thread.gmane.org/gmane.science.nmr.relax.devel/5024.  The optparse.OptionGroup object is now used to cluster the arguments.  This cleans up the output of 'relax -h' and explains the options to the user in a clearer way.
        * Fix for the user function intro flag.  Fix for sr #3117, (https://gna.org/support/?3117) - Functionality to inspect interactively after running script - The equivalence to python -i.  It should be turned on for the script so you see the "relax>" messages, and then turned off again for the prompt so that the user function text and "relax>" is not printed out twice.
        * Updated the copyright statement shown in the GUI for 2014.
        * Save state added for bug #21665.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added system test to catch bug: relax -s Relax_disp.test_bug_21665_cpmg_two_fields_two_delaytimes_fail.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added a system test for using both calc() and a system test for relax_disp auto analysis.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added some initial screenshots of the dispersion GUI analysis.  These will be used to create a tutorial for using the relaxation dispersion analysis in the GUI to be added to the dispersion chapter of the relax manual.
        * Started to create the tutorial in the manual for using the dispersion GUI.  This is at the end of the relaxation dispersion chapter of the manual and covers the basic setup of spin systems.  It includes the recently added screenshots.
        * Improvement to the formatting of the GUI menu item text in the manual.  The text can now have a line break between the items, just after the arrows.  This significantly improves the paragraph layout in the manual.
        * Created two new LaTeX commands for improving the layout of the relax manual.  These are \ossep and \osus which will be used to format the file and directory separator character and the underscore character respectively.  They will be used in the \file{} and \directory{}commands to add the '/\linebreak[0]' and '\_\linebreak[0]' text to allow for better line breaking.
        * Converted all LaTeX files of the manual to use the new \ossep and \osus commands.  This will result in better formatting of the manual by making the linebreaking after '/' and '_'characters consistent and universal.
        * Created two new LaTeX commands for improving the layout of user functions in the relax manual.  These are \ufsep and \ufus which will be used to format the user function separator character and the underscore character respectively.  They are used in the \uf{} commands to add the '.\linebreak[0]' and '\_\linebreak[0]' text to allow for improved and consistent line breaking.
        * Added the unit test infrastructure for testing the specific_analyses.relax_disp package.  This currently includes the package __all__ list unit test.
        * Updated the specific_analyses.relax_disp package __all__ list.  This was identified in the previously committed unit test.
        * Added the infrastructure for the unit tests of the specific_analyses.relax_disp.disp_data module.  This is in response to the post http://thread.gmane.org/gmane.science.nmr.relax.scm/19963/focus=5046 by Troels, and is described in my response at http://thread.gmane.org/gmane.science.nmr.relax.scm/19963/focus=5048.
        * Created two new LaTeX commands for improving the layout of Python code in the relax manual.  These are \pysep and \pyus which will be used to format the Python module separator character and the Python underscore character respectively.  They are used in the \module{}, \pycode{}, etc.  commands to add the '.\linebreak[0]' and '\_\linebreak[0]' text to allow for improved and consistent line breaking.
        * Complete reformatting of the base LaTeX files.  The paragraph structure has been changed so that each sentence now starts on a new line.  This is for better tracking of changes (via 'svn diff' for example), for better searchability of certain text elements using command line tools such as 'grep', and for easier easier use of the 'sed' tool.  The change tracking is most important as it allows for finer granularity - a small change will now only be shown as a change in one sentence rather than the whole paragraph, allowing the change to be identified more easily.  It also allows for easier commit maintenance.
        * Reformatting of all of the LaTeX code for the figures in the relax manual.  The aim is to have as many parts as possible on separate lines to allow for better control of changes in the subversion repository and for improved usage of command line tools.
        * Reformatting of all of the LaTeX code for the itemize and description lists in the relax manual.  This is to regularise the LaTeX code throughout the *.tex files of the manual.  All items are now indented for easier viewing.  And leading empty lines before the lists have all been removed.
        * The docstring fetching script for the manual now creates lists in the new, cleaner format.
        * Implemented unit test for catching the correct return of loop_exp_frq_offset_point_time.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Grammar corrections - changed the 'eg.' abbreviation to 'e.g.' in a couple of places.
        * Modified the unit test name for testing the correct return of the relaxation time periods.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added more to the dispersion GUI analysis tutorial.  This includes a screenshot showing the use of the 'Spin isotope' button in the GUI.  Descriptions for all five 'metadata' buttons have been added as well.
        * Expanded the relaxation dispersion GUI tutorial in the manual.  This now includes the first steps for loading the peak intensity data.
        * Added the The relaxation time period to be used when returning cpmg frqs.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added test for skipping non-matching time points.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added the time point to be sent into the return function of cpmg frequencies.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Improved unit test for catching both time and dispersion point when looping over experiment and time points.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Modified the spectrum.read_intensities user function frontend to load multiple files.  This follows from the thread http://thread.gmane.org/gmane.science.nmr.relax.devel/5057/focus=5062.
        * Implemented the GUI element for loading multiple files.  This follows from the thread http://thread.gmane.org/gmane.science.nmr.relax.devel/5057/focus=5062.  This is via the new user function argument type "file sel multi", now used by the spectrum.read_intensities user function.  The file selection element consists of two parts.  The GUI element embedded in the user function wizard page is similar to the "file sel" element, except that the preview button is not present.  The file selection button behaviour is also different in that it launches the new multiple file selection window.  The multiple file selection window is based on the 'sequence' data window, as used in the spectrum ID argument for the spectrum.read_intensities user function.  However the ListCtrl element has been replaced by a custom scrolled panel.  The 'Add' button adds a new file selection GUI element consisting of a TextCtrl for displaying and manual editing of the file name, the file selection button for launching the relax file selection dialog, and the preview button lost in the parent GUI element.  The scrolled panel allows more elements in the panel than can fit in the window.  The 'Delete all' and 'OK' buttons from the 'sequence' data window are also present and function as expected.
        * Modification of the new multiple file selection GUI element.  The multiple file selection window now shows the index (plus one) of each file selection element at the front of that element.  This way the user can easily see how many file elements there are and can match file names to numbers.  This will help in making sure that the file names and spectrum ID elements correspond to each other.
        * Added a 'Delete' button to the new multiple file selection GUI window.  This simply deletes the last item in the list.  This will be useful if the user clicks on the 'Add' button too many times - instead of clicking 'Delete all' and having to re-select all files, now the last element can be removed.
        * Improved the behaviour of the multiple file selection GUI window.  The RelaxFileDialog GUI element is now initialised when the file selection button is clicked rather than in the __init__() method.  The result of this change is that the current working directory is dynamically changed in the RelaxFileDialog, hence if the directory is changed in one file selection element, it will look like it is changed in all.
        * Renamed the test_loop_exp_time() dispersion unit test to test_loop_exp_frq_offset_point_time().  This is for the specific_analyses.relax_disp.disp_data.Test_disp_data.test_loop_exp_frq_offset_point_time() unit test.  The name better reflects the function being tested.
        * Created the test_loop_exp_frq() dispersion unit test.  This checks the operation of the loop_exp_frq() function from the module specific_analyses.relax_disp.disp_data.  It uses the data attached to the bug report at https://gna.org/bugs/?21665.
        * Fixes for the unit tests of the spectrum.read_intensities user function.  A number of checks were not correctly set up, and the recent changes caused others to now fail.
        * Modified the GUI window for inputting sequence data to include item numbers.  An non-editable initial column with the number of each item has been added.  This is to help the user when, for example, the items of one sequence element should match another (for example in the spectrum.read_intensities user function where multiple file names should match multiple spectrum IDs).
        * Added a 'Delete' button to the sequence input GUI window.  This is to match the multiple file selection GUI window.  The button allows the user to delete the last item from the list.  So if 'Add' has been clicked too many times, the user does not have to start again from scratch by clicking on 'Delete all'.
        * More modifications to the sequence input GUI window to match the multiple file selection element.  The window now starts with a single element rather than nothing.
        * Continued expanding the tutorial for performing a relaxation dispersion analysis in the GUI.  This is for the dispersion chapter of the manual.
        * Created the Peak_lists.test_read_peak_list_sparky_double system test.  This is used to test the loading of multiple files simultaneously by the spectrum.read_intensities user function.
        * Expanded the Peak_lists.test_read_peak_list_sparky_double system test to check all intensities.  This now checks all of the peak heights read by the spectrum.read_intensities user function.
        * Expanded the capabilities of the spectrum.read_intensities user function.  Now multiple files can be loaded simultaneously.
        * Fix for the multiple file selection GUI element.  The GUI element now returns single values rather than lists from the GetValue() function when only a single file is selected.  This allows the spectrum.read_intensities user function to operate normally again in the GUI.
        * Minor fix for the Relax_disp.test_bug_21076_multi_col_peak_list system test.  The spectrum ID argument ['auto'] has been changed to the single value of 'auto'.  This argument should not be a list.
        * Expansion of the tutorial for running the relaxation dispersion analysis in the GUI.  The tutorial is now close to complete.  The peak intensity loading wizard section is complete as well the model selection window and optimisation settings sections and the relax execution.
        * More additions for the tutorial on using the dispersion analysis in the GUI.  This is for the relaxation dispersion chapter of the manual.  The tutorial is almost complete with descriptions and screenshots for completing the non-clustered analysis and conducting the clustered analysis all the way to execution.
        * Created the State.test_bug_21716_no_cdp_state_save system test.  This is for catching bug #21716 (https://gna.org/bugs/?21716), the failure to save the relax state just after deleting the current data pipe, even if other data pipes exist.
        * Created the General.test_bug_21720_pipe_switching_with_tab_closure GUI test.  This is to catch bug #21720 (https://gna.org/bugs/?21720), the failure to set the current data pipe in the GUI when the current and non-last analysis tab is closed.  The test replicates the steps as outlined in the bug report.
        * Added unit test for looping over: exp frq offset point.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  This follows recommendation in thread: http://thread.gmane.org/gmane.science.nmr.relax.devel/5070.
        * Added unit test for looping over: exp frq offset point.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  This follows recommendation in thread: http://thread.gmane.org/gmane.science.nmr.relax.devel/5070.
        * Changes for the relaxation dispersion auto-analysis.  The final data pipe name now includes the data pipe bundle name.  This is so the pipe name is unique, allowing multiple analyses to be executed in one relax state.
        * Fixes for all of the Relax_disp system tests for the changes to the dispersion auto-analysis.  The automatically created pipe names now include the pipe bundle name to make them unique, so the system tests have been updated to match this behaviour.
        * Increased the grid search size in the r1rho_on_res_m61.py dispersion system test script.  This is to allow the Relax_disp.test_m61_exp_data_to_m61 system test to pass more often.  The increase does not cause a large increase in computation time as less time is spent in the optimisation and Monte Carlo simulation steps.
        * Renamed unit test, to follow previous namings of unit tests.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Fix for the relaxation dispersion auto-analysis to improve its behaviour in the test suite.  The problem is that the auto-analysis acquires the execution lock (status.exec_lock) but if the analysis cannot complete due to a bug, the lock is never released.  This causes nasty problems for many subsequent tests, resulting in a cascade of test failures.  This is especially problematic in the GUI tests where the execution lock controls many aspects of the interface.  The solution was simply to run the auto-analysis run() method within a try-finally statement.  The release of the lock occurs in the 'finally' clause, guaranteeing its release.
        * Improvement for GUI test base tearDown() clean up method.  A wx.Yield() call has been added to allow all GUI operations after a relax reset to complete prior to the next test starting.  This should avoid certain racing conditions which can cause a cascade of tests to fail.
        * Added unit test for looping over: exp, frq, offset, point, time.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  This unit test will fail, since the last loop over the time points has a weak assumption just to loop over all time points, instead of checking for existence of such time point.  This unit test follows recommendation in thread: http://thread.gmane.org/gmane.science.nmr.relax.devel/5070.
        * Expanded the loop_time function to optional take the spectrometer frequency as input for restricting looping.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Replaced print commands to be compatible with Python 3.x.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * More fixes for the relaxation dispersion auto-analysis for the pipe names now including the bundle name.
        * Added some missing RelaxError imports to the dispersion auto-analysis.
        * Created the Relax_disp.test_bug_21715_clustered_indexerror system test.  This is to catch bug #21715 (https://gna.org/bugs/?21715), the failure of the relaxation dispersion auto-analysis when running a clustered analysis due to an IndexError during minimisation.
        * Modified unit test to pass.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  Implemented as suggested in: https://mail.gna.org/public/relax-devel/2014-02/msg00142.html.
        * Expanded the loop_time function to optional take the offset and dispersion point as input for restricting looping.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  This is implemented as suggested in: https://mail.gna.org/public/relax-devel/2014-02/msg00143.html.
        * Added system test for loop_time.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  This system can be extended later for purposes to test the restriction of the looping.
        * Replacing looping over time points from cdp.relax_time_list to loop_time(frq=frq).  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  loop_time has been modified to accept spectrometer frequency as input to restrict the looping.
        * Complete support for deselected spins has been added to the relaxation dispersion analysis.  This fixes bug #21715 (https://gna.org/bugs/?21715), the failure of the relaxation dispersion auto-analysis when running a clustered analysis due to an IndexError during minimisation.
        * Added exp_type, frq, offset, point to the loop_time() function.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  Implemented as suggested in: http://www.mail-archive.com/relax-devel@gna.org/msg04993.html.  In all these cases, that information is available, so it should be used.  If one are analysing a combination of data types simultaneously (SQ CPMG, DQ CPMG, R1rho), one will not have the same relaxation time for each.  For different spin-lock or 180 degree pulse offsets and even different dispersion points, the time may also be different.
        * Made count_relax_times() take optional arguments as: exp_type, frq, offset, point.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  This is prepare for restricting the looping over time points in the function: loop_time().  This is implemented as suggested in: http://www.mail-archive.com/relax-devel@gna.org/msg04993.html.
        * Modified to pass exp_typ, frq, offset or point to loop_time() where such information is available.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added unit test for count_relax_times.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.  This follows the suggestion in: http://www.mail-archive.com/relax-devel@gna.org/msg04993.html.
        * Added test for return of get_curve_type(), to match 'fixed time'.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added check for return of has_exponential_exp_type to be False.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added test for the return of get_times().  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Re-ordered unit tests for test of get_curve_type() and has_exponential_exp_type().  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added the extraction of exp_type and frq from cdp, to be sent into count_relax_times.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Modified check_exp_type_fixed_time to loop over ID's and use count_relax_times for each ID.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * The fetch_docstrings.py script now creates a new LaTeX listing language for relax log messages.  This is in the script_definitions() method which creates the script_definition.tex file.  The idea is to avoid colouring relax/Python keywords such as 'as', 'from', etc. in the log messages.
        * Moved the unit test get_times() to its own test.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Moved the unit test of has_exponential_exp_type() to its own test.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Moved the unit test get_curve_type() to its own test.  Regarding bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Added save state for bug 21344.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Completed the tutorial for using the dispersion analysis in the GUI.  This is for the relaxation dispersion chapter of the manual.
        * Some edits for the tutorial on using the dispersion GUI analysis.  The results of the relax_disp.insignificance user function are now shown to demonstrate what this does.
        * Fixes for some incorrectly reported results in the dispersion GUI tutorial in the manual.  The non-clustered results had been incorrectly copied from the log messages.
        * More incorrect value fixes for the dispersion GUI tutorial in the manual.  The pA and kex values were also somehow incorrect.
        * Added system test for bug #21344.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  This test will fail with: No intensity data could be found corresponding to the spectrometer frequency of 799.7773991 MHz, dispersion point of 431.0 and relaxation time of 0.14 s.  Data for a dispersion point of 431.0 and time 0.14 does not exist, and so some of the looping in collecting data for calculation must be wrong.  This behaviour and probably its solution is related to bug 21665, "Running a CPMG analysis with two fields at two delay times" (https://gna.org/bugs/?21665).
        * Renamed previous disp_data unit tests, to reflect they were from a CPMG setup.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added unit test for count_relax_times() for and R1rho setup.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Fixes for the Grace kex plot for the tutorial for dispersion GUI analysis.  The values for the Grace plot were not correct.
        * Added unit test for loop_time() for r1rho setup.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Renamed system test.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  The previous test name was rubbish.
        * Editing of the dispersion GUI analysis tutorial in the manual.  The whole section has been proofed and improved.
        * A concluding statement has been added to the dispersion GUI analysis tutorial in the manual.
        * Added spacing in front of all lstlisting environments in the relaxation dispersion chapter of the manual.
        * Spelling fix for the spectrometer frequency checks of the spectrometer.frequency user function.
        * Spell checking of the entire relaxation dispersion chapter of the manual.
        * Correction for some text in the dispersion chapter of the manual.  The text 'are differentially defined' has been changed to 'are dually defined', as the word differentially was incorrect.
        * Fixes for the spacing after e.g. and i.e. in the relax manual.  The character '\' needs to be used after the final dot to indicate that this is not a sentence stop, hence the double spacing normally used between sentences should not be used.
        * Extended system test to count number of settings iterations and match with len(cdp.exp_type.keys()).  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  There is something wrong, since cdp.exp_type.keys()) is not matching.
        * Fix for using a wrong index slicing.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Fixes for the wrong use of reading settings file and extracting parameters.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Expanded unit test for test_loop_time() in R1rho.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Fix for the loop_time function to include point filtering for R1rho experiments.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Fix for wrong values of "1341.11" in unit test.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  Replaced 1341.10, and 1341.10 with 1341.11.
        * Added truncated SeriesTab intensity file for only 5 spins.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Modified system test for setting up R1rho analysis to use truncated spin list with 5 spins.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added 5 spins truncated state file for bug #21344.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Modified unit and system test to use 5 spins truncated state file.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added unit test for find_intensity_keys() in R1rho analysis.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Manually reverted the temporary change of r22349 and 22348.  The command used was:svn merge -r22349:r22347Reference: http://www.mail-archive.com/relax-devel@gna.org/msg05012.html.
        * Modified unit test for find_intensity_keys() to simulate method in sim_pack_data().  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Re-created the testing dictionary to easier to convert to collections.OrderedDict() if this can be supported in all relax Python versions.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Replaced dictionary keys in unit test, to easier access the original data.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added experiment ID to dictionary, where dict() keys are offset_point_time.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Fixed to send in offset to find_intensity_keys() which allow system test to pass.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  This is the first fix to allow system test to pass: relax -s Relax_disp.test_bug_21344_sparse_time_spinlock_acquired_r1rho_fail_relax_disp A better solution is described in: http://thread.gmane.org/gmane.science.nmr.relax.devel/5107 which will be implemented.
        * Added text about '~' on MS Windows to the dispersion GUI tutorial in the manual.  The home directory ~ on MS Windows will not work, so this is now explained.
        * Parsed offset to find_intensity_keys() where such information is available.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added unit test for return_intensity() for a R1rho setup.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Fix for wrong use of variable name key and list return from find_intensity_key().  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added offset to be sent to return_intensity() function.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Extended return_intensity() unit test to also test for flag ref=True, which return reference intensity instead.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Added offset to be sent to loop_spectrum_ids() function.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Fix for wrong variable spectrometer_frq used instead of frq.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Removed functional return of reference intensity in R1rho, since this does not exists.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.
        * Removed function return_intensity(), as this is no longer in use.  Regarding bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.  Reference: http://www.mail-archive.com/relax-devel@gna.org/msg05020.html.


    Bugfixes:
        * Minor bugfix for the internal structural object add_model() method.  The internal structural object was being called with self as an argument, which would default to the chain_id keyword argument.  The result would be relax state files with multiple copies of the internal structural object embedded in the structural XML section.
        * Fix for bug #21605, the failure of the Frame_order.test_generate_rotor2_distribution system test.  The bug at http://gna.org/bugs/?21605 is due to the fact that numpy.float16 is not defined on all systems.  Older numpy versions do not have this.  Therefore the float16 value is now imported from lib.check_types where it is aliased to float32 when not defined.
        * Fix for bug #21615, the missing data dialog failure when executing the GUI model-free analysis.  This is the bug at https://gna.org/bugs/?21615 as reported by Ivan Leung (ivanhoe dott leung att chem dott ox dot ac dot uk).  The problem is that the spin container's "isotope" variable is being accessed directly after a test showing that this variable does not exist.  This is now fixed so that the missing data dialog is now presented explaining that the spin isotope information is not set.
        * Fix for bug #21704, the failure of the GUI analyses when the home directory '~' character is used.  The bug is located at https://gna.org/bugs/?21704.  The problem is located in many parts of the program, and other problematic areas may still be present.  In all cases where the directory or file is accessed, the os.path.expanduser() function must be called.
        * Fix for bug #21716 (https://gna.org/bugs/?21716).  This is the failure to save the relax state just after deleting the current data pipe, even if other data pipes exist.  The problem was that the specific analysis functions data_names() and return_data_desc() were being retrieved using the current data pipe rather than the actual data pipe that the data structures belong to.  So if the current data pipe is None, then these fail.  Now the data pipe type is being passed through all of the to_xml() methods so that the correct data_names() and return_data_desc()methods are retrieved.
        * Fix for bug #21720 (https://gna.org/bugs/?21720).  This is the faulty pipe switching behaviour when a non-last analysis tab is deleted in the GUI.  Now the correct data pipe should be always switched to when closing an analysis tab.
        * Fix for bug #21695 (https://gna.org/bugs/?21695).  This is the failure of the relaxation dispersion system tests on a 64-bit MS Windows system due to lower precision of the platform.  Two of the errors have already been found on a 64-bit Windows Vista virtual machine and fixed.  The last test should now also pass.
        * Fix for bug #21665, (https://gna.org/bugs/?21665) - Running a CPMG analysis with two fields at two delay times.
        * Fix for bug #21344, (https://gna.org/bugs/?21344) - Handling of in sparse acquired R1rho dataset with missing combinations of time and spin-lock field strengths.



Version 3.1.5
(4 February 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.1.5

    Features:
        N/A


    Changes:
        * Updated the interatom.unit_vectors user function description to add the text '3D structure'.  This is in response to the http://thread.gmane.org/gmane.science.nmr.relax.user/1547 relax-users mailing list message and the change is to clarify the usage of the user function.
        * Created the Noe.test_bug_21591_noe_calculation_fail system test.  This is to catch bug #21591 (https://gna.org/bugs/?21591) submitted by Martin Ballaschk (https://gna.org/users/mab).  This is the complete failure of the NOE analysis.  The peak lists attached to the bug report have been included in the test suite to create the system test.
        * Improvements for the steady-state NOE analysis overfit_deselect() method.  The spin deselection which occurs at the start of the calc user function call, used to calculate the NOE, is now clearer.  Each deselection condition is now explained in detail and the text is now far more informative.  In addition, the special condition of all spins being deselected is now caught.  If this happens, a RelaxError is raised to prevent the user from going forwards.  This should remove confusion as to why the output file is empty.


    Bugfixes:
        * Fix for bug #21591 (https://gna.org/bugs/?21591), the complete failure of the NOE analysis.  This bug was reported by Martin Ballaschk (https://gna.org/users/mab).  The issue was introduced in the fix for bug #21562 (https://gna.org/bugs/?21562).  The problem is that the overfit_deselect() method was deselecting all spins with two data points or less rather than one or less.



Version 3.1.4
(31 January 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.1.4

    Features:
        * The structure.write_pdb user function now supports multiple molecules being present.
        * Large speed optimisations for the internal structural object when multiple models are present.
        * Improved support for replicated spectra in the NOE analysis.


    Changes:
        * Created the Frame_order.test_generate_rotor2_distribution system test.  This is to test the Frame Order distribution generating base script, used for creating the synthetic Frame Order test data, and to demonstrate a failure in handling back-calculated RDC data.  To implement this, the test_suite/shared_data/frame_order/cam/ path has been converted into a Python package (with the addition of the __init__.py files).  The base data generation script test_suite/shared_data/frame_order/cam/generate_base.py has also been modified to use the absolute path for the data files and its run() method now accepts the save_path argument to allow the files to be saved into a temporary directory.
        * Fixes for the Frame_order.test_generate_rotor2_distribution system test.  The test_suite/shared_data/frame_order/cam/generate_base.py script now saves the program state files into the self.save_path directory, preventing the system test from attempting to save files into the relax test suite directories.
        * Another fix for the Frame_order.test_generate_rotor2_distribution system test.  The test_suite/shared_data/frame_order/cam/generate_base.py script no longer prints its progress indicator to sys.__stderr__ but to sys.stderr instead.  This avoids the progress text from appearing during the relax test suite execution.
        * Created the Structure.test_bug_21522_master_record_atom_count system test.  This is designed to catch bug #21522 (https://gna.org/bugs/?21522), the structure.write_pdb user function creating an incorrect MASTER record.  This hence also catches bug #21520 (https://gna.org/bugs/?21520), the failure of the structure.write_pdb user function when creating the MASTER record due to too many ATOM and HETATM records being present.  The test simply creates two structural models, adds one atom, and writes out a PDB file, checking its contents.
        * The structure.write_pdb user function can now handle a file instance for the file argument.  This is for the Structure.test_bug_21522_master_record_atom_count system test, to allow a dummy file object to be used.  This can also be useful for power users.
        * Created the lib.geometry.vectors.unit_vector_from_2point() function.  This is used to quickly calculate the unit vector between two points.
        * The lib.structure.represent.rotor.rotor_pdb() function can now handle multiple rotors.  Previously this function would fail if called twice with the same structural object.
        * Added the has_molecule() method to the relax internal structural object.  This is used to quickly check if a molecule name already exists in the structural object.
        * More improvements for handling multiple rotors in the lib.structure.represent.rotor.rotor_pdb() function.  The atom numbering is now better handled.
        * Better support for the writing out of multiple molecules by the structure.write_pdb user function.  This is for the internal structural object write_pdb() method.  Now each molecule is assigned a different chain ID in the PDB file, and the chain IDs loaded into the structural object are ignored.  The chain IDs should however be preserved when using structure.read_pdb followed by structure.write_pdb, without storing the ID.  A number of the Structure system tests had to be updated, as now the relax generated PDB files will always write out a chain ID.
        * Large speed up for the internal structural object for when many models are present.  The new ModelList.current_models object keeps track of all the models already present in the structural object.  This simplifies the checks of the pack_structs() internal structural object method by removing expensive looping.  This allows the loading of PDB files to continue to be fast even with many tens or hundreds of thousands of models already loaded.
        * More speed ups for the internal structural object when huge numbers of models are present.  Another loop over the structural_data object has been eliminated from the PDB reading load_pdb() method.
        * Another optimisation for the internal structural object for large numbers of models.  The ModelList.add_item() method no longer loops over all models to check if a model is already present, instead using the new current_models list.
        * Yet more optimisation for handling large quantities of models in the internal structural model.  Now when adding new models to the object, the model_indices and model_list objects are no longer created.  This saves much time as the large model_list is now not sorted.  A number of structural object methods have been updated to handle the change by switching to the model_loop() method for looping over the models, rather than using the model_indices and model_list objects.
        * The frame order matrix printing function can now output the matrix to any precision.  The lib.frame_order.format.print_frame_order_2nd_degree() function now accepts the 'places' argument which allows for higher precision printouts.
        * The behaviour of the rdc.write user function has been changed to output spin ID strings in single quotes.  This is to avoid problems with the '#' molecule identifier and the '#' comment character.
        * Fix for the diffusion_tensor.init user function reference in the intro chapter of the manual.  This was using a very old and now non-functional syntax.
        * Created the Diffusion_tensor.test_bug_21561_tensor_pdb_failure system test.  This is to catch bug #21561 (https://gna.org/bugs/?21561), as reported by Martin Ballaschk (https://gna.org/users/mab).  This catches the failure of the structure.create_diff_tensor_pdb user function for non-spherical diffusion tensors when no Monte Carlo simulations are present.
        * Added the truncated data for creating a system test to catch bug #21562.  This bug (https://gna.org/bugs/?21562) was reported by Dhanas Muthu (https://gna.org/users/dhanas) and is the failure of the NOE analysis when spectra are replicated.  This consists of the Sparky peak lists attached to the bug report and the modified 2AT7 PDB file.  The data has been truncated to only include residues :12, :13, and :14.
        * Shifted the NOE system test script into the new 'noe' directory.
        * Created the Noe.test_bug_21562_noe_replicate_fail system test.  This is to catch bug #21562 (https://gna.org/bugs/?21562), reported by Dhanas Muthu (https://gna.org/users/dhanas).  This is the failure of the NOE analysis when spectra are replicated.  This uses the truncated data taken from the files attached to the bug report.  The NOE output file is checked to see if the contents are correct.
        * Better support for replicated spectra in the NOE analysis.  The saturated and reference peak intensity and error are now properly averaged.  Previously averaging was not used as the number of replicates N are cancelled in the ratios used for the NOE and error calculation.  However this fails when the number of replicates for the saturated spectrum does not match the number of replicates for the reference spectrum.  Now any data combination is possible.
        * Another fix for the NOE analysis for when replicated spectra have been collected.  Variance averaging rather than error averaging is now used for the peak intensity errors.  This is important if the errors for each replicated spectra are different - a case which is rarely encountered as the replicates are almost always used to determine one error for all the replicates.


    Bugfixes:
        * Fix for bug #21499 (https://gna.org/bugs/?21499), the failure of the rdc.write user function.  The rdc.write user function fails for back-calculated RDC data.  The fix was to handle the missing interatom.rdc_data_types variable.
        * Fix for bug #21522 (https://gna.org/bugs/?21522) and bug #21520 (https://gna.org/bugs/?21520).  These bugs are the structure.write_pdb user function creating an incorrect MASTER record and the failure of the structure.write_pdb user function when creating the MASTER record due to too many ATOM and HETATM records being present.  The counts for the ATOM, HETATM, and TER records are now only for a single model, rather than being the sum for all models together.
        * Fix for bug #21561, the structure.create_diff_tensor_pdb user function failure with no simulations.  Bug #21561 (https://gna.org/bugs/?21561) was reported by Martin Ballaschk (https://gna.org/users/mab).  The problem was that the simulation axes of the tensor PDB file were not being initialised correctly when no Monte Carlo simulations had been run.
        * Fix for bug #21562, the failure of the NOE analysis when spectra are replicated.  This bug (https://gna.org/bugs/?21562) was reported by Dhanas Muthu (https://gna.org/users/dhanas).  The problem was that the NOE overfit_deselect() method was deselecting all spins which do not have exactly 2 intensity values.  This is incompatible with replicated spectra as the number will be greater than two.  The check has been modified to deselect spins only when the number of intensity values are zero or one.



Version 3.1.3
(16 January 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.1.3

    Features:
        N/A


    Changes:
        * Fix for the parameters listed for the IT99 dispersion model in the manual.
        * Improvements and addition of many links to the lib.dispersion.cr72 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.cr72-module.html.
        * Spacing fix for the lib.dispersion.cr72 module docstring.
        * Improvements and addition of many links to the lib.dispersion.dpl94 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.dpl94-module.html.
        * Improvements and addition of many links to the lib.dispersion.it99 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.it99-module.html.
        * Improvements and addition of many links to the lib.dispersion.lm63_3site API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.lm63_3site-module.html.
        * Improvements and addition of many links to the lib.dispersion.lm63 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.lm63-module.html.
        * Improvements and addition of many links to the lib.dispersion.m61b API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.m61b-module.html.
        * Improvements and addition of many links to the lib.dispersion.m61 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.m61-module.html.
        * Improvements and addition of many links to the lib.dispersion.mmq_cr72 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.mmq_cr72-module.html.
        * Improvements and addition of many links to the lib.dispersion.mp05 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.mp05-module.html.
        * Improvements and addition of many links to the lib.dispersion.ns_cpmg_2site_3d API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_cpmg_2site_3d-module.html.
        * Epydoc URL simplifications.
        * Improvements and addition of many links to the lib.dispersion.ns_cpmg_2site_expanded API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_cpmg_2site_expanded-module.html.
        * Improvements and addition of many links to the lib.dispersion.ns_cpmg_2site_star API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_cpmg_2site_star-module.html.
        * Added the 'NS CPMG 2-site 3D full' model to the lib.dispersion.ns_cpmg_2site_3d module docstring.
        * Improvements and addition of many links to the lib.dispersion.ns_mmq_2site API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_mmq_2site-module.html.
        * Improvements and addition of many links to the lib.dispersion.ns_mmq_3site API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_mmq_3site-module.html.
        * Improvements and addition of many links to the lib.dispersion.ns_r1rho_2site API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_r1rho_2site-module.html.
        * Improvements and addition of many links to the lib.dispersion.ns_r1rho_3site API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.ns_r1rho_3site-module.html.
        * Small docstring edit for the lib.dispersion.mp05 module.
        * Improvements and addition of many links to the lib.dispersion.tap03 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.tap03-module.html.
        * Improvements and addition of many links to the lib.dispersion.tp02 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.tp02-module.html.
        * Epydoc URL simplifications in the lib.dispersion.mp05 module.
        * Epydoc docstring edit in the lib.dispersion.mmq_cr72 module.
        * Improvements and addition of many links to the lib.dispersion.tsmfk01 API documentation.  This is for the API documentation at http://www.nmr-relax.com/api/3.1/lib.dispersion.tsmfk01-module.html.
        * Copyright notice updates for the lib.dispersion modules changed today.
        * Added links to the relax wiki, API documentation, and relax website to all dispersion models in the manual.  This is to make it easier to find additional information about each of the models.
        * Updated the author list for the submitted paper for the relaxation dispersion analysis.
        * Added the primary reference for relaxation dispersion in relax to the dispersion chapter of the manual.  This is the paper which is not published yet.
        * Removed the single quantum R1rho-type data reference in the introduction of the dispersion chapter of the manual.  This is redundant as R1rho data is always single quantum.


    Bugfixes:
        N/A



Version 3.1.2
(13 January 2014, from /trunk)
http://svn.gna.org/svn/relax/tags/3.1.2

    Features:
        N/A


    Changes:
        * The average_intensity() dispersion function now accepts the offset argument.  This is for better support of combined offset and spin-lock varied R1rho-type data.  The argument is then passed into the find_intensity_keys() function.
        * Improved the DPL94 dispersion model description in the manual.
        * Copied a Sparky peak list to be modified to be a Sparky file without intensity column.
        * Modified the Sparky file to have no columns with intensity values.
        * Implemented to read spins from a SPARKY list, when no intensity column is present.  Addition to Support Request #3044, (https://gna.org/support/?3044) - load spins from Sparky list.
        * Created the Relax_disp.test_bug_21460_disp_cluster_fail system test.  This is to catch bug #21460 (https://gna.org/bugs/?21460) reported by Min-Kyu Cho.  The save file added to the repository consists solely of the data for the first residue.
        * Speed ups for the Relax_disp.test_bug_21460_disp_cluster_fail system test.  The optimisation precision is not important for demonstrating this bug.
        * Updated the main copyright notice for 2014.
        * Fix for the main copyright notice.
        * Updated the copyright notice visible to the user to 2014.
        * Updated the copyright for the relax GUI splash screen for 2014.
        * Improvement for the relax test suite printout with the --time command line argument flag.  The tests printed out now have the package and module names removed, so that one the test name remains.  This removes a large amount of text, simplifying the printout.


    Bugfixes:
        * Partial fix for bug #21338 (https://gna.org/bugs/?21338) - the bad sRGB profile in some PNGs.  This is only partial as some files are still to be converted (the original Bruker logo, and the 16x16, 22x22 and 32x32 sized Bruker icons).
        * Fix for bug #21460, the failure of relaxation dispersion due to incorrect spectrometer information.  This is the bug https://gna.org/bugs/?21460, reported by Min-Kyu Cho.  There was only one place in the dispersion analysis which failed due to a spectrometer frequency not containing any relaxation data - in the insignificance testing in the auto-analysis.
        * Loosened the chi2 check in the Relax_disp.test_korzhnev_2005_15n_mq_data system test.  This is to allow the test to pass on a 32-bit Linux (Mageia 1) test system.



Version 3.1.1
(10 December 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/3.1.1

    Features:
        * Support for reading 3D structures of organic molecules from Gaussian log files using the new structure.read_gaussian user function.
        * Addition of the lib.periodic_table module for storing information about the periodic table.
        * Addition of the lib.nmr module for basic NMR related functions.  It currently has functions for converting between ppm, Hz, and rad.s^-1 units.
        * Many improvements to the relaxation dispersion chapter of the user manual.
        * The 'NS MMQ 3-site linear' numeric model - the model for 3-site exchange using 3D magnetisation vectors linearised with kAC = kCA = 0 with the parameters {R20, ..., pA, pB, dw_AB, dw_BC, dwH_AB, dwH_BC, kex_AB, kex_BC}.
        * The 'NS MMQ 3-site' numeric model - the model for 3-site exchange using 3D magnetisation vectors with the parameters {R20, ..., pA, pB, dw_AB, dw_BC, dwH_AB, dwH_BC, kex_AB, kex_BC, kex_AC}.
        * The 'NS R1rho 3-site linear' numeric model - the model for 3-site exchange using 3D magnetisation vectors linearised with kAC = kCA = 0 with the parameters {R1rho', ..., pA, pB, dw_AB, dw_BC, kex_AB, kex_BC}.
        * The 'NS R1rho 3-site' numeric model - the model for 3-site exchange using 3D magnetisation vectors with the parameters {R1rho', ..., pA, pB, dw_AB, dw_BC, kex_AB, kex_BC, kex_AC}.
        * More model nesting in the relaxation dispersion auto-analysis ('CR72' and 'MMQ CR72', 'LM63' and 'LM63 3-site').
        * Large speed up of the 'TP02' and 'NS R1rho 2-site' dispersion models by minimising repetitive calculations.
        * Support for the loading of spins directly from peak lists.
        * Support for the reading of peak intensities from NMRPipe seriesTab formatted files (*.ser).


    Changes:
        * Small improvement for the devel_scripts/log_converter.py script for detecting commit boundaries.
        * Added many small details to the release checklist document.  This is for the formatting and editing of the CHANGES file, which is used for the release announcements.  Some additional details about the API documentation at http://www.nmr-relax.com/api have been added too.
        * Added sectioning printouts for the relaxation dispersion auto-analysis.  This simply tells the user which part of the protocol is currently being performed.
        * Setup for testing the sample_scripts/relax_disp/R1rho_analysis.py sample script.  The script was copied into the test_suite/shared_data/dispersion/r1rho_off_res_tp02/ data directory where it will be tested on real data.  The 'fake_sequence.in' and 'unresolved' files have been created to allow the script to run.  And the script itself has been heavily debugged.
        * All of the relaxation dispersion auto-analysis options are now exposed by the sample scripts.  This included the pre_run_dir argument for specifying a directory of results from a non-clustered analysis and the flag for running MC simulations for all models.
        * Added the DATA_PATH variable to the cpmg_analysis.py dispersion sample script.  This allows the user to more easily specify a different directory for the files.
        * Docstring improvement for the test_suite/shared_data/dispersion/r1rho_off_res_tp02/R1rho_analysis.py script.
        * Synchronised the test_suite/shared_data/dispersion/Hansen/relax_disp.py with the sample script.  This script now matches very closely with the sample_scripts/relax_disp/cpmg_analysis.py sample script.  This is for sample script debugging purposes.
        * Created a base data pipe for Flemming Hansen's truncated CPMG data for testing out missing data.  The :4 spin is missing just a few data points, whereas the :71 spin is missing all 800 MHz data.
        * Created the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test.  This is used to demonstrate a failure in the 'R2eff' model when some data is missing.
        * Expansion and fixes for the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test.  The parameters for spin :4 are now being checked, and all the checks updated for the changed data.  The parameter values are slightly different as data is now missing and because only 3 spins are used for the error analysis whereas in all other Hansen CPMG data sets the more accurate errors are from all spins.
        * The lib.dispersion.cr72.r2eff_CR72() function is now more robust.  Values less than 1.0 are now caught to avoid passing it into the numpy.arccosh() function.  This avoids many warning messages on Mac OS X.
        * Added a Gaussian DFT optimisation log file to the shared data directories.  This will be used to test the reading of structural data from Gaussian files.
        * Modified the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test to catch another failure.  This is the failure of all numeric models when all data from one magnetic field strength is missing for a spin.
        * Created data for a 'NS MMQ 3-site (branched)' model using cpmg_fit from Dmitry Korzhnev.
        * The relax_disp.r2eff_read_spin user function now really strips comments and empty lines from the file.
        * A big change to the usage of the relax_disp.r2eff_read_spin user function.  Now the nu_CPMG frequency or the spin-lock field strength must be set prior to calling this user function.  This allows for more flexibility as often the experiment IDs and frequency values in the files do not match to the same number of decimal places.  The frequency is no longer read from the file but must be preset.
        * Created a relax script for back calculating R2eff values for the same parameters as cpmg_fit.  This is for the 'NS MMQ 3-site (branched)' CPMG dispersion model.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_test_suite.
        * Created the Relax_disp.test_ns_mmq_3site_branched system test.  This is for the 'NS MMQ 3-site (branched)' CPMG dispersion model.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_test_suite.
        * Added the 'NS MMQ 3-site' models to the dispersion variables.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site (linear)' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.
        * Added another Gaussian log file of strychnine, this time with DFT structure optimisation.  The file is bzip2 compressed to save space.
        * Created the Structure.test_read_gaussian_strychnine system test.  This will be used for implementing and testing the structure.read_gaussian user function.
        * Created the lib.periodic_table module for storing information about the periodic table.  This is via the periodic_table object which will have different methods for obtaining different information about an element.
        * Implemented the structure.read_gaussian user function.  This will read the final structural data out of a Gaussian log file.
        * Improved the checking of the Structure.test_read_gaussian_strychnine system test.  This now checks all the atomic information loaded.
        * Simple fix for the Relax_disp.test_korzhnev_2005_*_data system tests.  The CPMG frequencies are now being set up in the setup_korzhnev_2005_data() method.
        * Added support for the 'NS MMQ 3-site' model parameters to the lib.text.gui module.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site (linear)' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the 'NS MMQ 3-site' models to the relax_disp.select_model user function frontend.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site (linear)' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_front_end.
        * Added support for the 'NS MMQ 3-site' models to the relax_disp.select_model user function back end.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site (linear)' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_back_end.
        * Added support for the new 3-site exchange dispersion parameters.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site (linear)' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_support_for_the_parameters.
        * Removed the brackets from the 'NS MMQ 3-site (linear)' dispersion model name.
        * Renamed the Relax_disp.test_ns_mmq_3site_branched system test to Relax_disp.test_ns_mmq_3site.
        * Fixes for the loop_parameters() dispersion function for the new 'NS MMQ 3-site' model parameters.  The new parameters were not being handled by this function.
        * Created the target functions for the 'NS MMQ 3-site' models.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site (linear)' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Added the R2eff calculating functions for the 'NS MMQ 3-site' models to the relax library.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site linear' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_library.
        * Added the 'NS MMQ 3-site' models to the dispersion auto-analysis.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site linear' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_auto-analysis.
        * Added the 'NS MMQ 3-site' models to the GUI model list.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site linear' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * Updated the 'MMQ 2-site' model description in the manual.  The R2_DQ = R2_ZQ = R20 assumption is now explained.
        * Added the 'NS MMQ 3-site' models to the relax user manual.  This is for the 'NS MMQ 3-site' and 'NS MMQ 3-site linear' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Completed the 'MMQ 2-site' documentation in the manual.  The equations for the numeric evolution of SQ, ZQ and DQ data was missing.
        * Huge speed ups of the relaxation dispersion analysis.  This is due to the removal of huge inefficiencies in the loop_point(), return_cpmg_frqs() and return_spin_lock_nu1() functions of the specific_analysis.relax_disp.disp_data module.  Two new functions return_cpmg_frqs_single() and return_spin_lock_nu1_single() have been introduces to pull out the nu_CPMG and spin-lock field strengths for a given experiment and spectrometer frequency.  This avoids calling the loop_exp() and loop_frq() functions from within loop_point() which itself is often called inside a loop_exp() and loop_frq() sequence.
        * Added the results of cpmg_fit minimisation of the cpmg_fit synthetic data for the 'NS MMQ 3-site' model.
        * Fixes for the 'NS MMQ 3-site' dispersion models - the evolution matrix is now correctly constructed.
        * Another fix for the 'NS MMQ 3-site' dispersion models.  The creation of the Z-matrix had a copy and paste error in that the heteronuclear chemical shift sign was negated when it should be positive.  This was only in one of the two chemical shift numbers.
        * Loosened the chi-squared check of the Relax_disp.test_ns_mmq_3site system test to allow it to pass.
        * Speed up of the Relax_disp.test_ns_mmq_3site system test.  The relax_disp.plot_disp_curves user function call is now skipped as it takes too long.
        * Renamed the 'ns_mmq_3site_branched' dispersion test data directory to 'ns_mmq_3site'.
        * Created the Relax_disp.test_ns_mmq_3site_linear system test and modified Relax_disp.test_ns_mmq_3site.  The Relax_disp.test_ns_mmq_3site_linear system test uses the old data from the directory test_suite/shared_data/dispersion/ns_mmq_3site/, as this had kAC = 0, now copied into the ns_mmq_3site_linear/ directory.  This system test uses the 'NS MMQ 3-site linear' model.  The base data generated by cpmg_fit for the Relax_disp.test_ns_mmq_3site system test was modified so that kAC is no longer 0, but set to 1000.  This should properly test the 'NS MMQ 3-site' model.
        * Renamed the 'MMQ 2-site' model to 'NS MMQ 2-site'.  This is so that the name matches those of the 'NS MMQ 3-site linear' and 'NS MMQ 3-site' models.
        * Renamed all remaining instances of 'MMQ 2-site' to 'NS MMQ 2-site'.  This is simply changing variable, method and module names.
        * Removed the 'MMQ 3-site branched' and 'MMQ 3-site linear' models from the to do list in the manual.  These two dispersion models are now implemented.
        * Renamed the 'MQ CR72' dispersion model to 'MMQ CR72'.  The model is designed by Korzhnev et al., 2004 for proton-heteronuclear SQ, ZQ, DQ, and MQ data (or MMQ data), so the change is logical as the model is not just for MQ data.
        * Clean up of the 'NS R1rho 3-site' model names in the manual.  The word 'branched' has been removed and the notation now matches the 'NS MMQ 3-site' models.
        * Clean up of the parameter lists in the dispersion model table of the manual.
        * The pC parameter constraints are now implemented for the 3-site dispersion models.  The new constraints are 0 <= pC <= pB.
        * Editing of the introduction section of the dispersion chapter of the manual.
        * Added the 'NS MMQ 3-site' parameters to the optimisation section of the dispersion chapter of the manual.
        * Added some R1rho data from Dmitry Korzhnev's Fyn SH3 domain.  This originates from the cpmg_fit software and is published data.
        * Small fix for the documentation of the relax_disp.r2eff_read* user functions.  This is for both relax_disp.r2eff_read and relax_disp.r2eff_read_spin.
        * Created the new lib.nmr relax library module.  This currently has a few simple functions for converting between ppm units and Hertz or rad/s units.
        * The relax_disp.spin_lock_offset user function now uses the lib.nmr module.  This is for converting between ppm and rad/s units.
        * The relax_disp.r2eff_read_spin user function now can handle offset data in the file.  If the new offset_col argument is set and disp_point_col is not, then the file being read can contain the spin-lock offset information rather than the spin-lock field strength values.  This is only for R1rho-type data.
        * Implemented GUI test which caches the bug #21076 (https://gna.org/bugs/?21076) - when loading a multi-spectra NMRPipe seriesTab file through the GUI, several Error messages occur.
        * Large redesign of the R2eff/R1rho data structures.  The five indices {Ei, Si, Mi, Oi, Di} for the experiment type, the spins of the cluster, the magnetic field strengths, the pulse offsets, and the dispersion points (nu_CPMG or nu1) respectively are now much better defined.  The Oi dimension is new and allows for support of R1rho-type data whereby both different offsets and different spin-lock field strengths have been collected.  Previously only one or the other was supported, but not both together.  The offset information is now included as part of the spin R2eff/R1rho key, even if not set.  To support this, the specific_analyses.relax_disp.disp_data module now has the new functions loop_exp_frq_offset(), loop_exp_frq_offset_point(), loop_exp_frq_offset_point_time(), loop_frq_offset(), loop_frq_offset_point_key(), loop_offset(), and loop_offset_point().  All of the {Ei, Si, Mi, Oi, Di} dispersion indices throughout the source tree have been changed to ei, si, mi,oi, and di respectively.  And the time index ti has also been introduced.  These changes hugely simplify the code.
        * The relax_disp.plot_disp_curves user function can now support 150 sets per Grace graph.
        * The relax_disp.plot_disp_curves user function can now support 3000 sets per Grace graph.
        * System test for sequence read expanded to include assertions of correct data.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added some more files for the Fyn SH3 R1rho test data.  This includes the cpmg_fit input and output files, R1 data files for relax as R1 cannot optimised yet, and a relax script.
        * Added system test for reading spins from a Sparky list.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added interpreter.spectrum.read_spins function.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Created the back end function for the read_spins function.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Fix for system test.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Extended reading of Sparky files to include residue names.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Expanded system test and made it pass for user function spectrum.read_spins.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Updated the GUI test to check for first ID in list.  Fix for bug #21076, (https://gna.org/bugs/?21076) - When loading a multi-spectra NMRPipe seriesTab file through the GUI, several Error messages occur.
        * Added keyword dim to frontend function for spectrum.read_spins().  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.  This is associate data with the spins of up to two dimensions.
        * Implemented system test for reading spins from NMRPipe SeriesTab formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Extended reading of spin residue names from NMRPipe SeriesTab formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Modified NMRPipe SeriesTab to read residue numbers and name for two-dimensional list.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Insert check if spin already exist before creating it.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Issuing a warning instead of error when loading spins from Sparky list where residue names are not present.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Issued a warning instead of error when loading spin residue names from a NMRPipe SeriesTab formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Changed to use return_spin for testing presence of spin.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Implemented another system test for reading NMRPipe SeriesTab files.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Fix for issuing a warning in reading spins from a NMRPipe SeriesTab formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Fix for issuing a warning when reading spins from a Sparky formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Implemented system test for reading spin IDs from NMRView formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Made reading of NMRView formatted file return the residue number as integer instead of string.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Fix for calling the warn() function.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Extended the error description for reading NMRView files.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Implemented system test for reading spins from a NMRPipe SeriesTab formatted file whereby the assignments for second dimension is missing.  This will be a typically export from Sparky, converted to NMRPipe format, and processed with SeriesTab.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Fixed for reading spins from a NMRPipe SeriesTab formatted file whereby dimension 2 misses residue number and residue name.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Expanded the warning message for a system test.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Modified system test for reading an assignment whereby the second dimension is missing.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * If dimension 2 in a SeriesTab formatted file does not contain residue number+name, it defaults to the dimension 1.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Implemented system test for reading spins from an XEasy file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Modified XEasy reading function to pass residue names back.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Copied a SeriesTab file for the implementation of double assignments in Sparky files.
        * Redesign of the CPMG frequency and spin-lock field strength data structures.  These now have an extra dimension for the offset so that the values are now experiment, magnetic field strength and offset dependent.  If many offsets are present but are variable for each dispersion point, then this saves a lot of calculation time.  This mainly affects R1rho-type data.  To better handle this, all of the specific_analyses.relax_disp.disp_data.loop_*() functions have been modified to accept data values rather than indices.
        * Improved the printout of the relax_disp.r2eff_read_spin user function for the R2eff keys.
        * Extended the system test for reading spins from Sparky files with empty residue name+number second dimension assignment.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Modified the Sparky peak list for two dimensional assignment example.  This will typically be the export from CcpNmr Analysis.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Implemented a system test for using double assignments in Sparky formatted files.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Extended reading of spins from Sparky files for up to two dimensional assignments.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added example of CcpNmr analysis exported Sparky file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added system test for reading CcpNmr Analysis exported Sparky file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Modified the reading of Sparky files when exported from CcpNmr Analysis.  The keyword 'Data' is not present here.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added a system test for using generic file for reading spins.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Modified the generic list to also return spin information when intensity is not present.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added another system test for returning spins from a generic file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added residue 4 to the R2eff files for the truncated CPMG data from Flemming Hansen.
        * Added cpmg_fit results to the software comparison table for Flemming Hansen's CPMG data.  The cpmg_fit input and log files have been added as well.
        * Shifted the software comparison down a directory so it can be used for all the different data.
        * Added system test for reading chemical shift from NMRPipe SeriesTab file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Implemented reading of chemical shifts from NMRPipe SeriesTab formatted files.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Additional chemical shift reading test for SeriesTab formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Improvements for the find_intensity_keys() dispersion analysis function.  This now handles the reference point None being converted to NaN in numpy arrays and the logic is now clearer.
        * Changed some warnings in the dispersion analysis so they only show if R1rho data is loaded.  This is for missing chemical shifts and R1 data.
        * Increased the size of the grid search in the Relax_disp.test_m61_exp_data_to_m61 system test.  This should increase the stability of this test.
        * Introduced the eliminate argument for the dispersion auto-analysis.  This flag allows model and Monte Carlo simulation elimination to be deactivated.
        * Updated two dispersion scripts in the test data directories to work with the current design.
        * Updated more test suite scripts to call the relax_disp.cpmg_frq user function.
        * The 'CR72' and 'MMQ CR72' models are now classified as nested in the dispersion auto-analysis.  The grid search for the 'MMQ CR72' model will therefore be skipped and the parameters taken from the 'CR72' model.  This will however rarely, if ever, be used.
        * Fix for the relax_disp.plot_disp_curves user function.  The interpolated curves now have all invalid points of 1e100 removed from the graph.  This allows for reasonable graph scaling.
        * The 'LM63' and 'LM63 3-site' models are now classified as nested in the dispersion auto-analysis.  The grid search for the 'LM63 3-site' model is therefore skipped and the starting parameters for optimisation are set to those of the optimised 'LM63' model.
        * Updated the relax results for the truncated CPMG data from Flemming Hansen.  This includes the new results for the 'MMQ CR72' model.  The analysis uses more model nesting.  And the Grace plots now include the interpolation graphs (hence the plots are now bzip2 compressed).
        * Updated the NESSY results for the truncated CPMG data from Flemming Hansen.  This now uses the data from all residues to allow for a proper error analysis so the results are comparable to all the other software.
        * Updated and reformatted the dispersion software comparison document.
        * Made a system test test pass on Mac OS 10.9.
        * Complete reworking of the 'NS R1rho 2-site' dispersion model.  The original code of Nikolai Skrynnikov and Martin Tollinger has been modified to match the behaviour of Dmitry Korzhnev's cpmg_fit software.  The equations from Korzhnev et al., JACS 2005 (http://dx.doi.org/10.1021/ja0446855) have been used for the initial magnetisation and the R1rho' calculation.  All equations have been added to the manual to clarify the model.
        * Both relax and cpmg_fit input and output files for the Fyn SH3 R1rho data have been added.  This is for the 'TP02' model and 'NS R1rho 2-site' models.  The cpmg_fit results include source code modifications to show the differences between the various 'corrections'.  The dispersion software comparison file has been updated to include this data and to show the cpmg_fit verses relax differences.
        * Updated the Relax_disp.test_tp02_data_to_ns_r1rho_2site system test.  This is for the fixes of the 'NS R1rho 2-site' dispersion model.
        * Added the Korzhnev 2005 R1rho constant time correction to the 'To do' section of the dispersion chapter of the user manual.
        * Removed the 'CR72' model for cpmg_fit from the dispersion software comparison table in the dispersion chapter of the user manual.
        * Removed the 'CR72' model for GUARDD from the dispersion software comparison table in the dispersion chapter of the user manual.  This software, like cpmg_fit, only supports the 'MMQ CR72' model which gives slightly different results to the original 'CR72' model when using only SQ CPMG-type data.  Hence supporting 'MMQ CR72' does not automatically mean that the 'CR72' model can be optimised.
        * Updated the ShereKhan error estimation technique in the dispersion software comparison table.  This is for the dispersion chapter of the user manual.  Adam Mazur communicated that errors are estimated using the covariance matrix in a private mail.
        * Large rearrangements in the dispersion chapter of the user manual.  The MMQ CPMG-type experiments now follow from the SQ CPMG-type experiments, hence the R1rho models are now listed last.
        * Added a to do entry for the 3-site and N-site analytic R1rho models listed in Palmer and Massi 2006.  This is for the 'To do' section of the dispersion chapter of the user manual.
        * Updated the lib.dispersion.ns_r1rho_2site module docstring to explain the origin of the equations.  This includes the Korzhnev 2005 reference where the modifications come from.
        * Created some synthetic data for the 'NS R1rho 3-site linear' dispersion model using cpmg_fit.
        * Added cpmg_fit results for the Fyn SH3 R1rho test suite data using the 3-site numeric solution.
        * Created the Relax_disp.test_ns_r1rho_3site_linear system test.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_test_suite.
        * Added the 'NS R1rho 3-site' models to the dispersion variables.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.
        * Added the 'NS R1rho 3-site' models to the relax_disp.select_model user function frontend.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_front_end.
        * Changed the order of the experiment types in the relax_disp.select_model user function frontend.  The R1rho-type models have been shifted to the end so that the MMQ CPMG-type models are just after the SQ CPMG-type models.
        * Changed the 'CPMG-type' to 'SQ CPMG-type' in the relax_disp.select_model user function frontend.
        * Added support for the 'NS R1rho 3-site' models to the relax_disp.select_model user function back end.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' CPMG dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_back_end.
        * Decreased the amount of synthetic data in the ns_r1rho_3site_linear test suite shared data directory.  The number of offsets for this 'NS R1rho 3-site linear' model synthetic data has been decreased from 81 points to 21.  This is because the large quantities of data slow the test suite down too much.
        * Added a GUI test for reading spins from a spectrum formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added the GUI key 'new spectrum' to point to 'spectrum.read_spins'.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added the spectrum.read_spins GUI page for reading spins from a spectrum formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added radio button for reading spins from a spectrum formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Further added to the GUI test for reading spins from spectrum formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Speed up of the Relax_disp.test_ns_r1rho_3site_linear system test.  Half of the data has been commented out, as too much data was being loaded for the test.
        * Created the target functions for the 'NS R1rho 3-site' models.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Added the R2eff calculating functions for the 'NS R1rho 3-site' models to the relax library.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_library.
        * Fix for GUI text string for the select radio button for reading spins from a spectrum formatted file.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Bug fix for the new 'NS R1rho 3-site' dispersion models - the Y and Z initial magnetisations were switched.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Debugging.
        * Added cpmg_fit results for the program modified to turn off the PEAK_SHIFT flag.  These are the results which should most closely match the relax results.  This is for the simulated R1rho data for the 'NS R1rho 3-site linear' model.
        * Fix for the MODEL_NS_R1RHO_3SITE_LINEAR dispersion variable.  The model name was not correct.
        * Turned off the dw dispersion parameter constraints for the 'NS R1rho 3-site' models.
        * Added the 'NS R1rho 3-site' models to the dispersion auto-analysis.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_auto-analysis.
        * Added the 'NS R1rho 3-site' models to the GUI model list.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * Removed the pC <= pB constraint from the 3-site dispersion models.  This is important for the linear models where a violation of this constraint is reasonable.  This has been replaced by the pC <= pA constraint.
        * Added the 'NS R1rho 3-site' models to the relax user manual.  This is for the 'NS R1rho 3-site' and 'NS R1rho 3-site linear' dispersion models.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Transposed some of the 'NS R1rho 3-site' model evolution matrix elements.  These now match the 'NS R1rho 2-site' model.
        * Last fixes for the 'NS R1rho 3-site' dispersion models.  These now behave identically to the cpmg_fit program with the PEAK_SHIFT flag disabled.  The tilt angle for the initial magnetisation is no longer that for the average offset but that of state A.
        * Fixes for swapped indices in the relaxation evolution matrix for the 'NS R1rho 3-site' dispersion models.
        * Docstring fix for the lib.dispersion.ns_r1rho_3site module.
        * Added the Omega_A,B,C resonance offset parameter definitions to the dispersion chapter of the manual.
        * Updated the relax results for the synthetic data of the 'NS R1rho 3-site linear' dispersion model.
        * Modified the 'NS R1rho 2-site' dispersion model to match the 'NS R1rho 3-site' models.  The 6D evolution matrix indices have been rearranged to match the 9D matrix indices.  The tilt angle for the initial magnetisation is no longer that for the average offset but that of state A, as was changed for the 'NS R1rho 3-site' models earlier.  The system test was therefore updated for the slightly different behaviour.
        * Updated the relax results for the Fyn SH3 R1rho dispersion data.  This is for the recent changes to the 'NS R1rho 2-site' dispersion model.
        * Updated the Relax_disp.test_ns_r1rho_3site_linear system test so it now passes.  The chi-squared value is not exactly zero as there are numerical differences between relax and cpmg_fit due to different approaches being used.
        * Added the RMSD determined via showApod for the 69 experiments.  Work in progress for Support Request #3083, (https://gna.org/support/?3083) -  Addition of Data-set for R1rho analysis.
        * Added system test for the analysis of optimisation of the Kjaergaard et al., 2013 Off-resonance R1rho relaxation dispersion experiments using the 'DPL' model.  Work in progress for Support Request #3083, (https://gna.org/support/?3083) -  Addition of Data-set for R1rho analysis.
        * Modified analysis script for example data of R1rho.  Work in progress for Support Request #3083, (https://gna.org/support/?3083) -  Addition of Data-set for R1rho analysis.
        * Created synthetic R1rho dispersion data for the 'NS R1rho 3-site' model.  This is a simple modification of the data for the 'NS R1rho 3-site linear' model.  The k_AC parameter was simply changed from 0 to 1000.  The cpmg_fit software was used to create the data.  Both cpmg_fit and relax results have been updated to the new model.
        * Created the new Relax_disp.test_ns_r1rho_3site system test.  This was copied from the Relax_disp.test_ns_r1rho_3site_linear test and modified to use the new 'NS R1rho 3-site' model synthetic data.
        * Fix for wrong use of relax_fit.relax_time instead of relax_disp.relax_time.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Added the ns_r1rho_3site module to the lib.dispersion package __all__ list.  This allows the unit tests to pass.
        * turned off a system test until the release of relax 3.1.1 is over.  Work in progress for Support Request #3044 (https://gna.org/support/?3044) - load spins from Sparky list.
        * Fix for the Relax_disp.test_bug_21076_multi_col_peak_list GUI test.  The peak intensity wizard is now closed at the end of the test so that subsequent tests can cleanly operate.  Without closing this wizard, launching it a second time in another test will always fail.
        * Capitalised 'Python' in the IO redirection messages.
        * Epydoc docstring fix for the lib.dispersion.ns_mmq_3site.r2eff_ns_mmq_3site_sq_dq_zq() function.  This allows the API to be compiled correctly.
        * Bug fix for the dispersion grid_search_setup() optimisation function.  This function was not updated for the recent addition of the spin-lock or hard pulse offset dimension in the specific_analyses.relax_disp.disp_data module (and hence all structures used by the dispersion target functions).  The loop_exp_frq_point() function call has been replaced by a loop_exp_frq_offset_point() function call to allow the 'R2eff' model parameters to be looped over.  For more details, see the thread http://thread.gmane.org/gmane.science.nmr.relax.scm/19685.  This solution was mentioned at http://thread.gmane.org/gmane.science.nmr.relax.scm/19685/focus=4859.
        * Removed a printout from the Relax_disp.test_r1rho_kjaergaard GUI test as this is fatal for Python 3.
        * Python 3 fixes for the relax_disp.r2eff_read_spin user function.  The check for the dispersion point column now only runs if that argument is set.  In addition, the offset column is now also being checked.


    Bugfixes:
        * Fix for the sample_scripts/relax_disp/R1rho_analysis.py sample script.  This was identified by Justin Lecher <jlec att gentoo doot org> in the post http://article.gmane.org/gmane.science.nmr.relax.devel/4748 (Message-ID:<52984043.3030808@gentoo.org>), or the threaded view http://thread.gmane.org/gmane.science.nmr.relax.announce/46/focus=4748.  The problem was some extra commas which should not have been there.
        * Bug fixes for the non-functional R1rho_analysis.py relaxation dispersion sample script.  This script was horribly broken, but it should now work.  It can even be executed from the base relax directory or from within the sample_scripts/relax_disp/ directory and perform the full analysis (assuming write access to the relax source directory).
        * Fix for a number of PNG files for NESSY and Bruker icons for broken IDAT entries.  This problem was identified by Justin Lecher <jlec att gentoo doot org> in the post http://article.gmane.org/gmane.science.nmr.relax.devel/4750 (Message-ID:<5298572C.5010409@gentoo.org>), or in the threaded view http://thread.gmane.org/gmane.science.nmr.relax.announce/46/focus=4750.  As a result those icons are missing in the GUI.  This was fixed using the pngcrush tool.
        * Fix for a typo in a model name in the cpmg_analysis.py relaxation dispersion sample script.
        * Fix for bug #21309, the 'R2eff' dispersion model failure when peak intensity data is missing.  The bug is reported at https://gna.org/bugs/?21309.  The problem was that the check for missing data in the _calculate_r2eff() private API method was accidentally deleted in the relax_disp branch.  See the commit at http://article.gmane.org/gmane.science.nmr.relax.scm/19261 and the accidental deletion at http://svn.gna.org/viewcvs/relax/branches/relax_disp/specific_analyses/relax_disp/api.py?view=diff&r1=21504&r2=21505&pathrev=21505.
        * Another fix for bug #21309, the 'R2eff' dispersion model failure when peak intensity data is missing.  The bug is reported at https://gna.org/bugs/?21309.  This second problem is only for the numeric CPMG models for when all data at one magnetic field strength is missing.  When the relaxation dispersion target function is being set up, the creation of the self.power data structure holding the number of CPMG blocks fails.  The problem is that the relaxation time for the missing field strength is set to NaN.  This is now caught using lib.float.isNaN().
        * Loosened a check in the Relax_disp.test_hansen_cpmg_data_missing_auto_analysis system test.  This is to allow this test to pass on certain Mac OS X machines.  It was reported by Troels in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/4773/focus=4774.
        * Basic fix for the Relax_disp.test_r2eff_read_spin system test - the CPMG frequencies are now set.  This was identified in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/4773/focus=4774.
        * Fixes for the parameters in the Relax_disp.test_ns_mmq_3site system test script.
        * Fix for optimisation of Dr. Flemming Hansen's CPMG data to the 'NS CPMG 2-site star' dispersion model.  Fix for bug #21322, (https://gna.org/bugs/?21322) - 5x Test suite fail for version 3.1.0, reported for system CentOS 2.6.32-358.18.1.el6.x86_64.  Adjusted pA, dw, kex, chi2.
        * Fix for optimisation of the Korzhnev et al., 2005 15N DQ CPMG data using the 'MMQ 2-site' model.  Fix for bug #21322, (https://gna.org/bugs/?21322) - 5x Test suite fail for version 3.1.0, reported for system CentOS 2.6.32-358.18.1.el6.x86_64.
        * Fix for optimisation of the Korzhnev et al., 2005 15N MQ CPMG data using the 'MMQ 2-site' model.  Fix for bug #21322, (https://gna.org/bugs/?21322) - 5x Test suite fail for version 3.1.0, Reported for system CentOS 2.6.32-358.18.1.el6.x86_64.
        * Fix for optimisation of the Korzhnev et al., 2005 15N ZQ CPMG data using the 'MMQ 2-site' model.  Fix for bug #21322, (https://gna.org/bugs/?21322) - 5x Test suite fail for version 3.1.0, Reported for system CentOS 2.6.32-358.18.1.el6.x86_64.
        * Fix for optimisation of all the Korzhnev et al., 2005 CPMG data using the 'MMQ 2-site' model.  Fix for bug #21322, (https://gna.org/bugs/?21322) - 5x Test suite fail for version 3.1.0, Reported for system CentOS 2.6.32-358.18.1.el6.x86_64.
        * Fix for optimisation of Dr. Flemming Hansen's CPMG data to the 'NS CPMG 2-site star' dispersion model. Changed so assertAlmostEqual matches 2 digits.  Fix for bug #21322, (https://gna.org/bugs/?21322) - 5x Test suite fail for version 3.1.0, reported for system CentOS 2.6.32-358.18.1.el6.x86_64.
        * Bug fixes for the dispersion analysis when certain data sets are completely missing.
        * Fix for loading a seriesTab formatted intensity, and getting the ID for the following GUI elements.  Fix for bug #21076, (https://gna.org/bugs/?21076) - when loading a multi-spectra NMRPipe seriesTab file through the GUI, several Error messages occur.
        * Fix for the relax_disp.r2eff_read_spin user function.  The offsets are now converted to ppm prior to finding the R2eff/R1rho key.



Version 3.1.0
(28 November 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/3.1.0

    Features:
        * Full support for the analysis of relaxation dispersion data in the prompt, scripting, and graphical user interfaces.
        * Support for single quantum (SQ), zero quantum (ZQ), double quantum (DQ), and multiple quantum (MQ) CPMG-type data.
        * Support for R1rho-type data.
        * Support for combined proton-heteronuclear SQ, ZQ, DQ, and MQ CPMG-type data (multiple-MQ or MMQ data).
        * The 'R2eff' model - used to determine the R2eff or R1rho values and errors required as the base data for all other models.
        * The 'No Rex' model - the model for no chemical exchange being present.
        * The 'LM63' SQ CPMG-type analytic model - the original Luz and Meiboom 1963 2-site fast exchange equation with parameters {R20, ..., phi_ex, kex}.
        * The 'LM63 3-site' SQ CPMG-type analytic model - the original Luz and Meiboom 1963 3-site fast exchange equation with parameters {R20, ..., phi_exB, k_B, phi_exC, k_C}.
        * The 'CR72' SQ CPMG-type analytic model - the reduced Carver and Richards 1972 2-site equation for most time scales whereby the simplification R20A = R20B is assumed with the parameters {R20, ..., pA, dw, kex}.
        * The 'CR72 full' SQ CPMG-type analytic model - the full Carver and Richards 1972 2-site equation for most time scales with parameters {R20A, R20B, ..., pA, dw, kex}.
        * The 'IT99' SQ CPMG-type analytic model - the Ishima and Torchia 1999 2-site model for all time scales with pA >> pB and with parameters {R20, ..., phi_ex, pA.dw^2, kex}.
        * The 'TSMFK01' SQ CPMG-type analytic model - the Tollinger et al., 2001 2-site very-slow exchange model for time scales within range of microsecond to second time scale with parameters are {R20A, ..., dw, k_AB}.
        * The 'NS CPMG 2-site expanded' SQ CPMG-type numeric model - A model for 2-site exchange expanded using Maple by Nikolai Skrynnikov (Tollinger et al., 2001) with the parameters {R20, ..., pA, dw, kex}.
        * The 'NS CPMG 2-site 3D' SQ CPMG-type numeric model - the reduced model for 2-site exchange using 3D magnetisation vectors whereby the simplification R20A = R20B is assumed with the parameters {R20, ..., pA, dw, kex}.
        * The 'NS CPMG 2-site 3D full' SQ CPMG-type numeric model - the full model for 2-site exchange using 3D magnetisation vectors with parameters {R20A, R20B, ..., pA, dw, kex}.
        * The 'NS CPMG 2-site star' SQ CPMG-type numeric model - the reduced model for 2-site exchange using complex conjugate matrices whereby the simplification R20A = R20B is assumed with the parameters {R20, ..., pA, dw, kex}.
        * The 'NS CPMG 2-site star full' SQ CPMG-type numeric model - the full model for 2-site exchange using complex conjugate matrices with parameters {R20A, R20B, ..., pA, dw, kex}.
        * The 'M61' R1rho-type analytic model - the Meiboom 1961 2-site fast exchange equation for on-resonance data with parameters {R1rho', ..., phi_ex, kex}.
        * The 'M61 skew' R1rho-type analytic model - the Meiboom 1961 2-site equation for all time scales with pA >> pB and with parameters {R1rho', ..., pA, dw, kex}.
        * The 'DPL94' R1rho-type analytic model - the Davis et al., 1994 2-site fast exchange equation extending the 'M61' model for off-resonance data with parameters {R1rho', ..., phi_ex, kex}.
        * The 'TP02' R1rho-type analytic model - the Trott and Palmer 2002 2-site equation for all time scales with pA >> pB and with parameters {R1rho', ..., pA, dw, kex}.
        * The 'TAP03' R1rho-type analytic model - the Trott et al., 2003 off-resonance 2-site equation for all time scales with the weak condition pA >> pB and with parameters {R1rho', ..., pA, dw, kex}.
        * The 'MP05' R1rho-type analytic model - the Miloushev and Palmer 2005 off-resonance 2-site equation for all time scales with parameters {R1rho', ..., pA, dw, kex}.
        * The 'NS R1rho 2-site' R1rho numeric model - the model for 2-site exchange using 3D magnetisation vectors with the parameters {R1rho', ..., pA, dw, kex}.
        * The 'MQ CR72' MMQ-type analytic model - the Carver and Richards 1972 2-site model for most time scales expanded for MMQ CPMG data by Korzhnev et al., 2004 with the parameters {R20, ..., pA, dw, dwH, kex}.
        * The 'MMQ 2-site' MMQ-type numeric model - the model for 2-site exchange whereby the simplification R20A = R20B is assumed with the parameters {R20, ..., pA, dw, dwH, kex}.
        * An automated protocol for relaxation dispersion which includes sequential optimisation of the models, fixed model elimination rules to remove failed models and failed MC simulations increasing both parameter reliability and accuracy (d'Auvergne and Gooley 2006), and a final run whereby AIC model selection is used to judge statistical significance.
        * Additional methods to speed up the auto-analysis by skipping the grid search:  Model nesting, the more complex model starts with the optimised parameters of the simpler;  Model equivalence, when two models have the same parameters;  And spin clustering, the analysis starts with the averaged parameter values from a completed non-clustered analysis.
        * Parallelisation of the dispersion analysis at the level of the spin cluster and Monte Carlo simulation for fast optimisation on computer clusters using OpenMPI.


    Changes:
        * Started to implement the framework for relaxation dispersion system tests.
        * Copied 'test_suite/system_tests/relax_fit.py' for relaxation dispersion.
        * Started to implement relaxation dispersion system tests.
        * Created the user_functions.relax_disp module by copying user_functions.relax_fit.  This file now needs to be modified to suit the needs of relaxation dispersion.
        * Manually created the relax_disp user functions.  This is equivalent to Seb's commit for the prompt.relax_disp module.  The equivalent changes to the user_functions.relax_disp were hand edited.  Added functions to select the experiment type and mathematical model used.  These functions allow the user to select the experiment type (cpmg or r1rho) as well as the mathematical model to fit the data (fast or slow).
        * Copied the 'relax_fit.py' script to 'relax_disp.py'.  This file, obviously, will need to be modified to suit the needs of the relaxation dispersion code.
        * Modified the script so it will test for fast-exchange curve fitting from CPMG data.  Data and functions to treat it are still missing.
        * Added a test for CPMG data in slow-exchange and changed the name of the test for fast-exchange.
        * Copied the 'relax_fit.py' specific functions to 'relax_disp.py'.  The code will now need many many many changes to suit the needs of relaxation dispersion.
        * Made a few changes towards a functional relaxation dispersion code.  This includes several modifications as well as the addition of the exp_type() function.
        * Moved the relax_time() function to cpmg_frq() and made other small changes.  Still much (!) work is needed for this code to be complete.
        * Renamed 'cdp.frq' to 'cdp.cpmg_frqs' so it is not confusing with the spectrometer frequency.  Indeed, 'cdp.cpmg_frqs' points to the CPMG pulse train frequency (nu_cpmg).
        * Changed all instances of 'relax_times' to 'cpmg_frqs' and made other small changes.
        * Changed 'relax_time' instances to 'cpmg_frq'.
        * Changed the index name and description.  The description might change later to be more appropriate when the code is more mature...
        * Included the setting of the spectrometer frequency and uncommented a few lines of code.  Of course, this won't work until the sample data has been introduced and the right names for the different files be input in the system test script...
        * Fixed many formatting errors and made the 'relax_disp' code accessible (pipes, interpreter, etc.).  These changes also include a coming back to using the C code 'math_fns/relax_fit.py' since there is still no such code associated to relaxation dispersion.  This will allow working in the code without relax crashing and complaining about the lack of a C module name 'relax_disp.py'.
        * Added the user function cpmg_delayT() which allows setting the CPMG constant time delay T used for the analysed dataset.  This follows a post at https://mail.gna.org/public/relax-devel/2009-01/msg00027.html.
        * Made a few changes so the cpmg_delayT() function now works.
        * Added the user function cpmg_frq() and added examples to the user function cpmg_delayT().
        * Corrected remaining frq instances to cpmg_frq when appropriate to avoid confusion and corrected a few related things in the system test script.
        * Made the cpmg_frq() function accept only None for the reference spectrum and corrected a typo.
        * Added the parameters for the slow- and fast-exchange regime.
        * Added the parameters for the slow- and fast-exchange regime in the function data_names().
        * Corrected a few formatting issues and still added parameters for the slow- and fast-exchange regime.
        * Corrected a few formatting issues and still added parameters for the slow- and fast-exchange regime.  Formatting issues corrected were spotted by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00045.html.
        * A bit more changes to introduce parameters for CPMG relaxation dispersion.
        * Introduced CPMG parameters into the function return_grace_string() and corrected formatting issues.
        * Introduced relaxation dispersion parameters in the function return_data_name().
        * Changed the default cpmg_frq value in cpmg_frq() from 0 to None.
        * Added a relaxation dispersion dataset in the system-test.  This was kindly provided by Dr Flemming Hansen (flemming AT pound DOT med DOT utoronto DOT ca) and was previously published in Hansen, Vallurupalli & Kay (2008) J. Phys. Chem. B, 112, 5898-5904.  The original format was different and was modified to better suit the way relax handles datasets.  Finally, the information contained here were written in a 'readme' file placed in the same directory as the dataset itself to allow referencing and acknowledgments.
        * Added 'Sparky' formatted files to the system-test so the files can be input and development of the branch continued.
        * Changed the format of the CPMG frequency and corrected the names of some input files.
        * Added an unresolved file to meet the script requirements.
        * Copied the script for the fast-exchange regime to the slow-exchange regime.
        * Modified the newly copied script so it is effectively for the slow-exchange regime.
        * Added details to the readme file and changed the directory name where the sample data is located.  The directory is now named 'dataset_1-a'.  This contains data recorded at 500 MHz.  Data recorded at 800 MHz will be put in a directory called 'dataset_1-b'.
        * Created a directory for the data recorded at 800 MHz and put a readme file explaining its origin.
        * Added the relaxation dispersion dataset recorded at 800 MHz in the system-test.  This was kindly provided by Dr Flemming Hansen (flemming AT pound DOT med DOT utoronto DOT ca) and was previously published in Hansen, Vallurupalli & Kay (2008) J. Phys. Chem. B, 112, 5898-5904.  The original format was different and two formats were made ('generic' and 'sparky'), as for the dataset recorded at 500 MHz.
        * Renamed the directories containing the sample datasets provided by Flemming Hansen.  The names are now more obvious as to their content...  This was proposed by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00056.html.
        * Added an 'unresolved' file to the 800 MHz data and moved (and modified) some files (sequence and readme) so there is only one copy for the 500 and 800 MHz data.  This prevents duplicated files.
        * Changed the object names so they are lower case as they should be, based on the rest of the code.  Made the equivalent change in the function assemble_param_vector() to allow the system-test to go further..  This was spotted by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00058.html.
        * Corrected capitalisation issues for param names.  These were spotted by Ed in a thread starting at https://mail.gna.org/public/relax-devel/2009-01/msg00059.html.
        * Rearranged commands in the scripts.  The experiment type and exchange regime will have to be input before the cpmg pulse train delay T.
        * Introduced a RelaxError when chosing 'r1rho' as experiment type as this won't be implemented now.  Efforts will be concentrated on the CPMG code first, then on the R1rho code.
        * Added tests, print statements and other code to the relaxation dispersion specific functions.  Tests were proposed by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00065.html.
        * Started to implement a function for calculating the effective transversal relaxation rate (R2eff).  This follows a thread at https://mail.gna.org/public/relax-devel/2009-01/msg00067.html.
        * Converted the function linear_constraints() for relaxation dispersion needs.
        * Started to implement the scaling matrix for scaling the 'R2eff' values.  This might change in the future as other possible curve fitting parameters ('R2', 'Rex', 'kex', 'R2A', 'kA', 'dw') might need some scaling.
        * Completed the scaling matrix code.  This follows a thread at https://mail.gna.org/public/relax-devel/2009-01/msg00073.html.
        * Imported relaxation dispersion in grace user functions.
        * Added a missing quote which prevented the user manual to be sconstructed.  This was discussed in a thread starting at https://mail.gna.org/public/relax-devel/2009-01/msg00082.html.
        * Started to implement a function for reading 'R2eff' values directly.  This is as proposed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00020.html.  The function does not contain code yet.
        * Started to put equations and references in the user function docstrings and also corrected a small typo.  This was proposed by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00028.html.
        * Corrected the way the scaling matrix is assembled.  This is as proposed by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00079.html.  The scaling values are now based on the default values for the different parameters which were slightly modified.  The only parameter for which the average is still used (as for intensities in the 'relax_fit.py' code) is 'R2eff'.
        * Continued to implement the user function calc_r2eff().  This follows a discussion at https://mail.gna.org/public/relax-devel/2009-01/msg00067.html.
        * Copied 'test_relax_fit.py' to 'test_relax_disp.py'.  This will allow the design of a few unit tests for the relaxation dispersion code.
        * Added two unit tests for the relaxation dispersion code and fixed errors in the corresponding code.  More unit tests will be added soon to help debugging and developing.
        * Added two more unit tests.
        * One more unit test.
        * One more unit test for the relaxation dispersion code.
        * Added more unit tests and tried to debug what was uncovered by these tests.  Still more work is needed for debugging...
        * A few fixes based on the unit tests problems.
        * Changed the default value for 'int_cpmg' to avoid an impossible mathematical situation: ln(0).
        * Fixed a bug where the 'id' argument was not set.  This was proposed by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00127.html.
        * Started to make changes for multiple field relaxation dispersion analysis.  This seems necessary, so maybe we should not support single field analysis of relaxation dispersion at all.  -> Kovrigin et al. (2006) JMagRes, 180: 93-104.  The changes made here are only a first draft and may not work.  In particular, maybe the spectrum.read_intensities(), relax_disp.cpmg_frq(), spectrum.replicated(),  spectrum.error_analysis(), and deselect.read() functions will need to know the magnetic field to which the particular dataset is associated...  In fact, the different datasets should be input first and their R2eff calculated independently.  In a second step, the actual relaxation dispersion curve fitting should be made with all data.
        * Fixed a bug which prevented the manual pdf to be compiled.  The problem was caused by a ':' character in the references (after the volume number, as usual).  This was changed for a '.' character.  Equations were fine..  Moreover, a better formatting was done by adding ':' characters after the word 'are' before enumerations.
        * Fixed the unit tests.  This is as proposed by Ed in a post at https://mail.gna.org/public/relax-devel/2009-01/msg00132.html.
        * Started to implement the reading of 'r2eff' by relax_data.read() by first writing a system test.
        * Updated a few dosctrings and tried to improve the system test.
        * Removed the obsolete function 'relax_disp.r2eff_read()'.  R2eff values will be read directly by 'relax_data.read()'.
        * Reordered a few functions for alphabetical reasons.
        * A small fix to the system test.  However, is this fix the solution or is there something wrong with the reading of data (such as 'R2eff') by relax_data.read()?  Shouldn't the data, for example 'R2eff', be available in 'cdp.mol[0].res[0].spin[0].R2eff_val[0]' or 'cdp.mol[0].res[0].spin[0].R2eff[0]' for the 1st spin of the 1st residue in the 1st molecule?
        * Fixed an import (as well as a few comments).  This however introduces an error concerning the 'chi2' being undefined in the C module for relaxation dispersion...
        * Solved an issue created during the merge process concerning the 'return_data_name_doc' call.  The solution is based on the code in 'specific_fns/relax_fit.py'.
        * Brought the relaxation dispersion branch into sync with the 1.3 line.  There were many design changes within the 1.3 line that required that the old relaxation dispersion code be updated.
        * Fixes for the relaxation dispersion system tests.  The install path is now in the status object, and not in __main__.
        * GPLv3 license updates for all files not found in the trunk.
        * Import fixes for the specific_analyses.relax_disp due to the recent trunk package layout redesign.
        * Made the non-API methods of the specific_analyses.relax_disp.Relax_disp class private.
        * Improvements for the GUI representation of the relax_disp user functions.
        * More import fixes for the new package layout.
        * Fix for the relax_data.read user function call in the Relax_disp.test_read_r2eff system test.  The column numbers must be supplied.
        * Some more fixes to make the Relax_disp.test_read_r2eff system test pass.  These are again changes needed due to the trunk now being very different.
        * The cpmg_frq argument of the relax_disp.cpmg_frq user function can now be None.
        * The cpmg_frq argument of the relax_disp.cpmg_frq user function can now be an integer as well as a float.
        * Updates for the relaxation dispersion system test scripts for the newer design of relax.  A number of changes were required as the code was quite old.
        * Created the lib.dispersion.equations module.  This is a translation of Sebastien Morin's C code in the old relax_disp branch.
        * Created a very basic initial target function class for relaxation dispersion.  This code is a translation of Sebastien Morin's C code in the old relax_disp branch.
        * The relaxation dispersion specific analysis code now uses the Python target function rather than the C.
        * Fix for the Relax_disp.test_curve_fitting_cpmg_fast system test variable names.
        * Added the model argument to the dispersion target function class to select between different equations.
        * The relaxation dispersion target function class now imports the equations from lib.dispersion.equations.
        * The relaxation dispersion target function class raises a RelaxError when the model is not implemented.
        * Modified all the relaxation dispersion test data Sparky files at 800 MHz.  The last three lines of the files were not properly formatted.
        * Converted all of the raising of RelaxErrors in the specific_analyses.relax_disp to the new standard.  This is for Python 3 support.
        * Converted all print statements in specific_analyses.relax_disp to function calls.  This is for Python 3 compatibility.
        * Converted the prompt unit tests for relaxation dispersion to the current relax design.
        * Updated the target_functions package __all__ list for the relax_disp module.
        * Another fix for the prompt argument unit tests of the relax_disp user functions.
        * Big changes to the front end of the relax_disp.select_model user function.  The model strings have been changed and are now programmatically added to the user function documentation.  The main text has also been redesigned.  And the new model 'exp_fit' has been added which allows just the exponential curves to be fit.
        * Python 3 import fix for the specific_analyses.relax_disp module.
        * Updated the documentation in specific_analyses.relax_disp to use the user_functions package design.  The user_functions.objects.Desc_container and user_functions.data.Uf_tables objects are now used to construct the relaxation dispersion documentation.
        * The relax_disp.select_model backend now handles the 'exp_fit' model.
        * Removed all aliasing of the current data pipe in specific_analyses.relax_disp as this is in __builtin__.
        * The specific_analyses.relax_disp module now uses the parameter list object to define parameters.  This allows the now unused methods data_names(), default_value(), return_data_name(), and return_grace_string() to be deleted and their contents copied into the parameter definitions in the class __init__() method.
        * Alphabetical arrangement of methods in the specific_analyses.relax_disp module.
        * Docstring cleanups for the specific_analyses.relax_disp module.
        * The relaxation dispersion specific analysis now aliases API base methods for a number of methods.
        * Import cleanup in the specific_analyses.relax_disp module.
        * The relaxation dispersion specific analysis module is now using the base _data_init_spin() method.  This is aliased to data_init() and replaces the old non-functional method.
        * Created the relax_disp.spin_lock_field user function.  This is used to set the spin-lock field strength of a given R1rho spectrum.
        * Created the relax_disp.relax_time user function.  This is almost a direct copy of the relax_fit.relax_time user function, but has been modernised.
        * Fix for the printout from the relax_disp.relax_time user function - the time is no longer divided by 1k.
        * Expanded the dispersion model parameters to include the exponential curve parameters.
        * Clean up of some of the old relax_disp user functions - many argument types are now numbers rather than floats.
        * Unit test fixes for the prompt relax_disp user function argument checks.
        * Added the specific_analyses.relax_disp module to the unit test checking of the specific API.
        * Big cleanup of the relaxation dispersion code to match the analysis specific API.  All methods not belonging to the API have been made private.  The arguments and keyword arguments for the API methods now match the API.
        * Completely redesigned the minimisation parts of the specific_analyses.relax_disp module.  Instead of dealing with the optimisation of individual spins, groups of spins are now optimised together.  This allows for the clustering analysis of relaxation dispersion.  The method _block_loop() has been created to loop over spin blocks, but it currently only returns individual spins.  However with the rest of the code designed to handle this loop, only this function needs to be modified to enable clustering.  The method _param_num() has also been added to determine the total parameter number per spin block.  The data structures sent into the Dispersion target function class have also been redesigned to handle spin blocks instead of individual spins.
        * Modified the relax_disp.cpmg_frq user function to match relax_disp.spin_lock_field.  Both the front and back ends now use the same logic as the relax_disp.spin_lock_field user function and will allow some sanity to the analysis specific code.
        * The relax_disp.cpmg_frq and relax_disp.spin_lock_field user functions now create cdp.curve_count.  This is an integer which indicates the number of exponential curves which are to be optimised per spin block.
        * The relaxation dispersion analysis specific _param_num() method now takes the number of curves into account.
        * Better setup checking for the relaxation dispersion specific analysis minimise() method.
        * Renamed cdp.curve_type to cdp.model to better explain the variable.
        * Fixes for the dispersion specific analysis separating R2eff from R2.  There is one R2eff parameter per exponential curve, but only one R2 per model.  The code now better handles this.
        * The dispersion specific methods now handle one R2eff and I0 parameter per exponential curve.
        * Better management of the global relaxation dispersion data.  The user functions relax_disp.cpmg_frq, relax_disp.spin_lock_nu1, and relax_disp.relax_time now maintain data structures in the current data pipe of the unique frequencies, fields, and times (sorted) as well as the number of frequencies, fields, and times.  This data is used by the minimise user function back end to set up the target function, and will be required by many other parts of the analysis.
        * The dispersion specific _assemble_param_vector() method now handles multiple R2eff and I0 values.  These spin structures are dictionaries holding multiple values.
        * Created the dispersion specific _exp_curve_loop() method for looping over each exponential curve.  This yields the index and key for each curve, simplifying the handling of this data.
        * Expanded the relax_disp.select_model user function documentation to cover R2eff and I0.  These parameters and how they are optimised are now better described.
        * Updated the relaxation dispersion target function class to handle the recent changes.
        * First attempt at a target function for fitting exponential curves for relaxation dispersion.
        * Added some synthetic data to test the 'exp_fit' relaxation dispersion model fitting.  These are just basic synthetic exponential curves.  R2eff and I0 should be very easy to find.
        * The lib.software.sparky.read_list_intensity() function can now handle lowercase in the residue names.
        * Created the Relax_disp.test_exp_fit system test for checking the relaxation dispersion 'exp_fit' model.
        * The specific_analyses.relax_disp module is now using minfx correctly.  The minfx grid search is no longer part of generic_minimise() and must be called separately.
        * The relax_disp function _grid_search_setup() now operates in the same way as the relax_fit code.  This function originates from the 'relax_fit' specific analysis code, but that code has since evolved.  The 'relax_disp' code now mimics the new code, returning lists of grid search increments and upper and lower limits.
        * The scaling flag is now initialised in the relaxation dispersion target function class.
        * Created the lib.curve_fit package and associated unit tests.  This will be used for holding modules such as for exponential curve-fitting required for the relaxation dispersion analysis.
        * Created the new lib.curve_fit.exponential module for exponential curve-fitting.  This contains the single exponential_2param_neg() function which will be used for the relaxation dispersion target functions.  This is based on Sebastien Morin's function exp_2param_neg in maths_fns.exponential.c in his dormant inversion-recovery branch.
        * Typo fix for the new lib.curve_fit.exponential.exponential_2param_neg() function.
        * The relaxation dispersion func_exp_fit() target function now uses exponential_2param_neg().  This is from the lib.curve_fit.exponential module.
        * Fix for the relaxation dispersion specific _assemble_scaling_matrix() method.  The values were all inverted - the matrix should hold values on the same order as the parameter values.
        * Fix for the func_exp_fit() relaxation dispersion target function.  The parameter index was not correctly calculated.
        * The 'exp_fit' relaxation dispersion model now uses the minfx.grid sparseness argument.  This is used to skip all parts of the grid search belonging to a different exponential curve or different spin.  If the number of curves is N and the number of spins M, the grid size decreases from inc**(2*N*M) to (inc**2)*N*M.  For lots of spins and curves, this is a huge decrease.
        * The relaxation dispersion specific _disassemble_param_vector() method is now functional.  This should allow the minimise user function to complete.
        * Fixes for the dispersion specific _assemble_param_vector() method.  The R2eff and I0 spin dictionary structures are now checked for their keys before pulling the value out.
        * Fix for the relaxation dispersion grid search.  The lower and upper bounds are no longer continually scaled with each optimisation.
        * Increased the speed of the Relax_disp.test_exp_fit system test by using a smaller grid search.
        * The relaxation dispersion target function class back_calc variable now matches the values variable.  Instead of being a temporary structure which is overwritten for each spin and each exponential curve, the structure now matches the dimensions of the values variable and hence is persistent per function call.  This allows external code to access the structure - for example for data back calculation in the relaxation dispersion specific analysis module.
        * Fixes for the dispersion specific _back_calc() method.  This method still has a long way to go before it is of any use.
        * Created a custom base_data_loop() method for the relaxation dispersion analysis.  This defines the base data as the peak intensities of a single exponential curve and yields the spin container and exponential curve key identifying the individual curves.
        * Activated Monte Carlo simulations for the relaxation dispersion analysis.  This required a bit of work.  The key parts were renaming _block_loop() to the API method model_loop() as that is exactly what the model_loop() method is supposed to do, converting a bunch of API common spin-based methods to handle dispersion clustering, and to modify existing methods from Seb's original branch to handle the base_data_loop() method.  The following methods have been added or modified.  _back_calc():  This method has been modified to handle clustering and the returning of peak intensities from only one exponential curve.  _exp_curve_index_from_key():  This new method is used to convert exponential curve key into the corresponding index.  _intensity_key():  This new method is for converting an exponential curve key and relaxation time into the corresponding intensity key.  create_mc_data():  This method is now functional and handles the data from the base_data_loop() method.  return_error():  This method now handles the data from the base_data_loop() method.  set_selected_sim():  This new method has been modified from the common _set_selected_sim_spin() method but modified for the model_loop() method.  sim_pack_data():  This method now handles the data from the base_data_loop() method.  sim_return_param():  This new method has been modified from the common _sim_return_param_spin() method to suit the model_loop().  sim_return_selected():  This new method has been modified from the common _sim_return_selected_spin() method again to suit the model_loop().
        * Modified the Relax_disp.test_exp_fit system test to be faster and not create plots which it cannot.
        * The Relax_disp.test_exp_fit system test now checks some of the final results.
        * The relaxation dispersion parameter errors from Monte Carlo simulations are now stored.  Previously MC simulations could run, but the errors were not being calculated and stored.  The sim_return_param() method was empty.  This method is now complete.  In addition the set_error() method has been created for setting the parameter errors.  And the _exp_curve_key_from_index() and _param_index_to_param_info() auxiliary methods added to facilitate data access.
        * Expanded the checking in the Relax_disp.test_exp_fit system test.
        * Converted all relaxation dispersion parameters to lowercase.  This is so the variable names match the parameter names identically, avoiding problems with some of the shared methods of the specific analysis API.
        * The spin parameters are now set up last by the relax_disp.select_model user function back end.
        * Added 'spin_lock_nu1' as a dictionary type parameter of the relaxation dispersion specific analysis.
        * Rearrangements of the 2 system tests of Fleming Hansen's CPMG data.  The system tests are now called Relax_disp.test_hansen_cpmg_data_fast_2site and Relax_disp.test_hansen_cpmg_data_slow_2site, and the system test scripts are now all in test_suite/system_tests/scripts/relax_disp/.
        * Created a basic initial auto-analysis script for relaxation dispersion.  This currently only supports the optimisation of the 'exp_fit' diffusion model, but has all of the infrastructure set up to make it easy to add other models.
        * Added the relaxation dispersion module to the auto_analyses package __all__ list.
        * The relaxation dispersion system test class now imports the auto-analysis.  This fixes an import order error.
        * The Relax_disp.test_exp_fit system test now uses the auto_analyses.relax_disp analysis.
        * Fix for the relaxation dispersion auto-analysis.  The exponential fit model is now selected prior to optimisation.
        * Removed the relax_disp.select_model user function call from the exp_fit dispersion system test script.  This is performed by the auto-analysis and not during setup.
        * Added testing for spin clustering to the Relax_disp.test_exp_fit system test.  This includes calls to the new relax_disp.cluster user function and the checking of pipe variables holding the clustering information.
        * Fix for the spin ID string for the relax_disp.cluster user function.  This is for the exp_fit.py relaxation dispersion system test script.
        * Implemented the relax_disp.cluster user function.  This is for clustering spins together for a dispersion analysis.
        * Clustering is now enabled for relaxation dispersion.  The model_loop() analysis specific API method now loops over the spin clusterings, allowing a cluster of spins to be optimised simultaneously to one set of model parameters.
        * Fixes for the spin clustering for relaxation dispersion.  Both optimisation and Monte Carlo simulations were affected by these bugs.
        * Speed up of the Relax_disp.test_exp_fit system test by cutting the grid size down to 3 increments.
        * Expanded the write_results() method of the relaxation dispersion auto-analysis.  More Grace graphs are now being produced, and the Rex file creation is now model dependent.
        * Fix for the relax_disp.cluster user function.  The 'free spins' category is now not deleted when empty.
        * Created an icon set for relaxation dispersion.
        * Renamed the relaxation dispersion test suite data directory to 'dispersion'.
        * Changed the relax_disp.cpmg_frq user function id argument to spectrum_id.  All the relax_disp user functions now operate with the spectrum IDs instead of experiment IDs.
        * The relax_disp.cpmg_delayT user function backend now uses the spectrum ID rather than experiment ID.
        * Expanded the relax_disp.exp_type user function to include the fixed period CPMG experiments.
        * The relax_disp.cpmg_delayT backend can now handle the 'cpmg fixed' experiment type.
        * The relax_disp.cpmg_frq user function can now handle values of None.  The float function is no longer used if the value of None is encountered.
        * Updated the dispersion system test script for Flemming Hansen's data.  This script should now be close to the final form for a relaxation dispersion analysis of CPMG data with a fixed relaxation time period.
        * Combined all the system test scripts of Flemming Hansen's fixed time period CPMG data.  For details of this data, see http://thread.gmane.org/gmane.science.nmr.relax.devel/3790/focus=3827.
        * Fixes for the renaming of the relaxation dispersion test suite shared data directory.
        * Started to redesign how R2eff is handled in the relaxation dispersion analysis.  Instead of being part of the optimisation of the dispersion model, it will itself be the model named 'R2eff' (converted from the 'exp_fit' model).  This model will either use the calc user function to determine R2eff when the fixed relaxation period experiment is selected, or fit exponential curves using the relax_fit C module for the variable relaxation period experiments.  The R2eff values will then be copied over for each dispersion model in the auto-analysis using the value.copy user function.
        * Created the relax_disp.plot_exp_curves user function.  This is to be used to create 2D graphs of the exponential curves (relaxation time verses peak intensity) as the grace.write user function plots are not very nice - the curves from each spectrometer field strength and dispersion point are mixed into one curve.
        * The relaxation dispersion auto-analysis is now created plots of the exponential curves.
        * The R2eff model now works for the variable time relaxation period and exponential curve-fitting.
        * The relax_disp.select_model user function now checks for the compiled C module when required.
        * Expanded the new analysis wizard in the GUI to accommodate the relaxation dispersion auto-analysis.  Now the buttons are a matrix of 4x2 with the NOE, R1, R2, and model-free analyses at the top and two new blank buttons have been added to the bottom.  One will be used for the dispersion analysis.
        * Created some basic graphics for the relaxation dispersion analysis fur use in the GUI.
        * Added the correct sized graphic for the relaxation dispersion button in the new analysis wizard.
        * Created the relaxation dispersion button in the new analysis wizard.
        * Created the initial version of the relaxation dispersion auto-analysis GUI frame.  This is built from copying lots of code from the NOE, R1, and R2 analyses.  The dispersion specific parts will be added later.
        * The relaxation dispersion GUI analysis now has an element for selecting the models to be optimised.
        * Removed some unneeded checks in the relax_disp.exp_type user function.
        * Added a GUI element to the relaxation dispersion auto-analysis for selecting the experiment type.
        * The relax_disp.exp_type user function has been shifted to the new analysis wizard.  Instead of being one of the elements on the relaxation dispersion analysis frame, it is now placed between the analysis selection page and the data pipe page of the new analysis wizard.  The user function execution is delayed until the set up of the frame, just after the execution of the pipe.create user function.  This will allow the frame to be set up differently for each experiment type.
        * Extended the tooltip for the experiment type GUI element in the relaxation dispersion frame.
        * Improvements to the tooltips in the relaxation dispersion analysis frame of the GUI.
        * Changed the peak intensity wizard for the relaxation dispersion frame to match the other analyses.
        * Unused import removal from the gui.analyses.auto_relax_disp module.
        * Missing import in the gui.analyses.auto_relax_disp module.
        * Added support for all the relaxation dispersion user functions in the Peak_intensity_wizard object.
        * Modified how the fixed time period is specified in the Flemming Hansen data system test.  Instead of using relax_disp.cpmg_delayT user function, the relax_disp.relax_time user function will be used.  The functionality is duplicated and relax_disp.cpmg_delayT is not needed.
        * Modified the Spectra_list GUI element to handle relaxation dispersion data.
        * The relaxation dispersion GUI analysis now uses the dispersion parts of the peak intensity elements.  This includes activating the dispersion parts of the Spectra_list GUI element for displaying the spectrum ID with associated metadata and the dispersion parts of the Peak_intensity_wizard for loading the data.
        * The relaxation dispersion auto-analysis is now correctly executed from the GUI.  The GUI data gathering is also now complete in the assemble_data() method.
        * Added some more module variables to specific_analyses.relax_disp for the experiment types.
        * The relaxation dispersion auto-analysis now performs the peak intensity error analysis.  This is essential for when the GUI is used.
        * More Unicode characters are now used in the relaxation dispersion GUI analysis frame.  The model parameter lists have also been improved.
        * Removed the spectrum.error_analysis user function call in the exp_fit.py dispersion system test script.  This is now performed by the auto-analysis.
        * Fixed for the error_analysis() method of the relaxation dispersion auto-analysis.  The method can now handle missing spectrometer field strength data.
        * More fixed for the peak intensity error analysis method of the relaxation dispersion auto-analysis.  The fixed relaxation time period type experiments can now be handled.
        * Elimination of the relax_disp.cpmg_delayT user function.  This user function is not necessary as the relax_disp.relax_time user function serves the same purpose.  The use of relax_disp.relax_time instead allows for code sharing between the fixed and variable time period relaxation dispersion experiment types.
        * Elimination of the relax_disp.calc_r2eff user function.  This user function, which is non-functional anyway, is not needed.  The calculation of the R2eff values will occur with the optimisation of the 'R2eff' model (with a call to the calc user function for the fixed time period experiment types) so direct calculation through a specific user function is not needed.
        * Improvements to the GUI text subscripting in the relaxation dispersion analysis frame.
        * Removed the temporary relaxation dispersion SVG graphic for the GUI analysis.
        * Redesign of the graphic for the relaxation dispersion analysis.  This is a modification of the r1.svg graphic to show roughly the graphic as in "Protein NMR Spectroscopy, Principles and Practice" by Cavanagh, Fairbrother, Palmer and Skelton.
        * Editing of the relaxation dispersion analysis graphic.
        * Added the relaxation dispersion graphic to all of the dispersion GUI user functions missing a graphic.
        * Redesign of the relaxation dispersion models in the relax_disp.select_model user function front-end.  The models have been renamed and better defined based on the experiment type (CPMG or R1rho).
        * The relaxation dispersion scaling matrix assembly now uses lib.mathematics.round_to_next_order().  This allows the printed out I0 values for the optimisation of the exponential curves to be easier to scale back to the real value.
        * The Relax_disp.test_hansen_cpmg_data_fast_2site system test now uses the R2eff model.  The equivalent slow exchange system test also uses the model.  This model will be used to find the R2eff values from the fixed relaxation time period data.
        * Fix for some RelaxError printouts in the relaxation dispersion specific code.
        * The relaxation dispersion class variables for the experiment types are now used for all comparisons.  This should avoid random bugs.
        * Fix for the calculation part of the relaxation dispersion auto-analysis.  This is for the fixed relaxation period data types.
        * The 2D Grace plots of the exponential curves are now skipped for the fixed relaxation period data types.  This is in the relaxation dispersion auto-analysis.
        * Started to implement the relaxation dispersion analysis specific calculate() method.  This will be used to calculate the R2eff/R1rho values for the fixed relaxation time period data types and is equivalent to Sebastien Morin's relax_disp.calc_r2eff user function which was deleted (see http://thread.gmane.org/gmane.science.nmr.relax.scm/17336).
        * Converted the specific_analyses.relax_disp module into its own package.  This is to allow the code to be broken up into separate modules to simplify the analysis.
        * Shifted out all of the variables and dispersion data specific code into separate modules.  The dispersion data private methods have been converted into functions of the specific_analyses.relax_disp.disp_data module.  The package variables have also been shifted into the specific_analyses.relax_disp.variables module to avoid circular imports.
        * Alphabetical ordering of the functions of the specific_analyses.relax_disp.disp_data module.
        * Created the specific_analyses.relax_disp.disp_data.loop_all_data() function.  This is to loop over all possible base relaxation dispersion data (spectrometer frequencies then dispersion points).
        * Updates for the dispersion user functions for the changes in specific_fns.relax_disp.
        * Typo fix in the new loop_all_data() function.
        * Created the lib.dispersion.calc_two_point_r2eff() function.  This is for calculating the R2eff/R1rho value for the fixed relaxation time data.
        * Improvements to the specific_analysis.relax_disp.disp_data module.  The function loop_all_data() has been expanded to include the relaxation time period into the loop.  The functions return_intensity() and return_key() have been added to return peak intensities and the key corresponding to the data returned by loop_all_data().
        * Fixes for some latent bugs in the specific_analyses.relax_disp.disp_data module.  The checks for the CPMG-data type in a number of functions now uses the CPMG_EXP list instead of fixed strings.
        * Completed the relaxation dispersion calculate() method.  This allows the R2eff/R1rho values to be calculated for the fixed relaxation time period experiments through the calc user function.
        * Created a script for running a full relaxation dispersion analysis on Flemming Hansen's data.  This is located in the shared data directories and is not part of the test suite as a full analysis will take far too long.
        * Updated the models in the script for the full relaxation dispersion analysis of Hansen's data.
        * Updated the backend of the relax_disp.select_model to handle the new model names.
        * Spun out a number of dispersion methods into the new specific_analyses.relax_disp.parameters module.  This is a module of functions relating to the parameters of the relaxation dispersion models.
        * More spacing before the sectioning printouts in the relaxation dispersion auto-analysis.
        * Modified the printouts of the relax_disp.select_model user function.
        * Fix for the relaxation dispersion auto-analysis.  The data pipes created for each model optimised are now switched to prior to any operations on the pipe.
        * Changed the phi_ex parameter in the LM63 model back to rex.
        * Changed the Grace string for the rex parameter to be phi_ex.
        * Converted all of the specific_analyses.relax_disp.parameters module to handle different models.  The R2eff and I0 parameters are now only part of the 'R2eff' model and all other standard parameters belong to all of the other models.
        * Shifted all of the constant relaxation dispersion variables into the specific module.  All of the dispersion code now uses the variables of specific_analyses.relax_disp.variables.
        * Renamed the lib.dispersion.equations.fast_2site() function to r2eff_LM63().  The number of relaxation times has also been replaced by the number of dispersion points.
        * Added the return_cpmg_frqs() and return_spin_lock_nu1() functions to specific_analyses.relax_disp.disp_data.
        * Updates to the relaxation dispersion auto-analysis.  The Grace plots created are now more dependent on the current model, so that dispersion curves are only created for the 'R2eff' model.  The specific_analyses.relax_disp.variables module is now also being used.
        * Started to redesign the relaxation dispersion target function class.  The input data is now expected to be R2eff/R1rho data and all mentions of exponential curves have been eliminated.  The func_exp_fit() target function has been deleted as it is not used - as now the _minimise_r2eff() method in the dispersion specific analysis class is used instead.  And the func_fast_2site() target function has been renamed to func_LM63().
        * Redesigned the optimisation code of the dispersion analysis specific class for the new target functions.  This includes the assembling of R2eff/R1rho values instead of peak heights, and a number of small fixes.
        * Shifted the LM63 dispersion model functions into the new lib.dispersion.lm63 module.
        * The reference spectrum is now not included when counting the number of dispersion points.
        * Fix for the lib.dispersion.lm63 module and parameters of zero are now gracefully handled.
        * Fixes for the func_LM63() dispersion target function.
        * Shifted the R2eff/R1rho value and error assembly into specific_analyses.relax_disp.disp_data.  This is in the new return_r2eff_arrays() function.  The code has also been debugged and made functional.
        * Added support for handling missing data in the relaxation dispersion analysis.  This support was mentioned in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/3835.
        * Added a FIXME to a comment about the hardcoded Bootstrap number for relaxation dispersion.
        * Started to add support for Monte Carlo simulations for the relaxation dispersion models.  This is for all models except 'R2eff'.  The changes are extensive but incomplete.  The new functions disp_point_key_from_index() and disp_point_index_from_key() have been added to the specific_analyses.relax_disp.disp_data module, but the disp_point_index_from_key() function still needs work.  The _back_calc() method of the specific_analyses.relax_disp.Relax_disp class has been redesigned, as well as base_data_loop() method and all methods which depend on it.
        * Updated the relaxation dispersion system tests of the Hansen CPMG data for the new models.  The models are now 'LM63' and 'CR72', and the tests have been renamed to Relax_disp.test_hansen_cpmg_data_LM63 and Relax_disp.test_hansen_cpmg_data_CR72.
        * Update of the specific_analyses.relax_disp package docstring.
        * Fix for the linear constraints setup of the 'R2eff' relaxation dispersion model.  There are no constraints, so the specific_analyses.relax_disp.parameters.linear_constraints() function now returns A and b values of None.
        * Basic fix for the _back_calc_r2eff() relaxation dispersion method.  A variable was misnamed.
        * Major redesign of the relaxation dispersion data model in the relax data store.  The data model now revolves around the three concepts of the spectrometer frequency, the dispersion points, and the relaxation times.  Peak intensity data is now handled through averaging using the new specific_analyses.relax_disp.disp_data.average_intensity() function.  R2eff/R1rho values are now referenced by a key generated from the spectrometer frequency and nu_CPMG frequency or nu1 spin-lock field strength.  All of the specific_analyses.relax_disp package has been standardised around these concepts.  This simplifies all of the modules of the package and removes a large number of latent bugs.
        * A number of fixes to partly enable Monte Carlo simulations for the non 'R2eff' dispersion models.
        * Finally Monte Carlo simulations for the relaxation dispersion models now work.  This was a simple fix for the specific_analyses.relax_disp.parameters.param_index_to_param_info() function.
        * Created truncated data files of the Hansen CPMG data.  This consists of residues 70 and 71 and will be used to massively speed up the system tests.
        * The truncated Hansen CPMG data is now in the form of Sparky peak lists.
        * Now all of the Hansen CPMG data is present as truncated Sparky peak lists.
        * Speedup for the relaxation dispersion system tests which use Flemming Hansen's CPMG data.  The system test script now reads the truncated data files (of only residues 70 and 71) to minimise the time required to read the data and store it in the relax data store.
        * Added a script to the test suite shared data for analysing the truncated Hansen CPMG data.
        * Fixes for the LM63 dispersion CPMG model.  The 'r2' model parameter is now an array as there is one R2 value per magnetic field strength.  And the 'rex' parameter has been renamed to 'phi_ex' and is scaled quadratically with the field strength within the optimisation target function.
        * Fix for the setup of the relaxation dispersion GUI analysis.  The base method add_execute_relax() has been renamed to add_execute_analysis().
        * Added support for interfacing with Art Palmer's CPMGFit program.  The two new user functions relax_disp.cpmgfit_input and relax_disp.cpmgfit_execute have been created to interface with CPMGFit.  The first creates the per spin system CPMGFit input files as well as a batch script for executing CPMGFit with all the input files.  The second bypasses the batch script and allows CPMGFit to be executed from within relax.  This mimics the palmer and dasha user functions.  The back end code is in the new specific_analyses.relax_disp.cpmgfit module.
        * Created the Relax_disp.test_hansen_cpmgfit_input system test.  This is for checking the operation of the relax_disp.cpmgfit_input user function conversion of Flemming Hansen's CPMG R2eff values into input files for CPMGFit.  A relax state file containing the results of an analysis of an 'R2eff' model analysis of the truncated data has been added to the test suite data to speed up the test and to check the loading of dispersion state files.
        * Created a directory for the results of the CPMGFit program using Hansen's truncated CPMG data.  The script 'cpmgfit.py' has been added to create the input files for CPMGFit and execute the program.  The input and batch files have been added to the repository as well.
        * Added the results from NESSY of the analysis of Flemming Hansen's truncated CPMG data.  This is only for the truncated data of residues 70 and 71.  All files, except for the PNG graphics, have been added to the repository.  The 'summary' file has been created to hold the data from NESSY's summary tab, as this is not stored in the NESSY saved state and is permanently lost after closing NESSY.
        * A dispersion saved state from the prompt or script UI can now be associated with a GUI analysis.
        * Created the Relax_disp.test_hansen_trunc_data GUI test for checking the GUI dispersion auto-analysis.  This checks the full operation of the relaxation dispersion GUI analysis, without checking the final results (to be added later).
        * Fixes for the change to the new spectrometer.frequency user function and associated data structures.
        * Removed the preview button from the file selection GUI element of the CPMGFit user functions.  These are the relax_disp.cpmgfit_execute and relax_disp.cpmgfit_input user functions.
        * The relaxation dispersion specific code now uses the changes of the spectrometer.frequency user function.  This simplifies the handling of magnetic field strength data.
        * More fixes to the relax_disp branch for the changes of the spectrometer.frequency user function.
        * Changes to the CPMGFit input files due to the new spectrometer.frequency user function.
        * The relax_disp.cpmgfit_execute user function now correctly calls CPMGFit.  The -grid command line option has been added and the output for each spin is sent to a special output file.
        * Updated the input files and added the output files for the CPMGFit program with Hansen's CPMG data.  This is for the data truncated to residues 70 and 71.
        * Fixes for the relax_disp branch for the spectrometer.frequency user function changes.
        * Fix for the Relax_disp.test_hansen_cpmgfit_input system test.  This is for the recent spectrometer.frequency user function changes.
        * The specific_analyses.relax_disp.disp_data.loop_frq() function can now handle missing data.  This allows the loop to yield a single value of None when the spectrometer information has not been loaded and enables R1rho analyses at a single field strength.
        * Fix for the LM63 dispersion model target function - the scaled Phi_ex value is now used for the R2.
        * Fixes for the relaxation dispersion auto-analysis for the LM63 model.  The Rex parameter is now the phi_ex parameter.
        * Added printouts of the optimised parameters to the Relax_disp.test_hansen_cpmg_data_LM63 system test.  This includes the conversion to the equivalent CPMGFit parameters.
        * Massively increased the precision of the R2eff error analysis.  The hard-coded simulation number variable is now set to 100000.  This appears to be necessary for reliably reproducing results in the subsequent dispersion models.
        * Created the specific_analyses.relax_disp.disp_data.spin_has_frq_data() function.  This is for determining if a spin has peak intensity for the given spectrometer field strength.
        * Updates some scripts for the spectrometer.frequency user function change.
        * Created a script to calculate the R2eff rate errors extremely precisely for Hansen's CPMG data.  This uses 1 million Bootstrap simulations for calculating the errors.  The 'r2eff_values.bz2' is saved after deleting the spin specific r2eff_sim structures so that the file drops from 388 Mb in size to 7.3 kb.
        * The CPMGFit script for Hansen's CPMG data now starts with the high precision error r2eff_values.bz2 file.  This ensures consistency between comparisons between relax, NESSY, CPMGFit, etc.
        * Removed the '_trunc' part of the nessy_results directory from the NESSY final save file.
        * The relaxation dispersion loop_point() function can now return the reference point.  This is enabled via the skip_ref argument.
        * Created the relax_disp.nessy_input user function front and backends.  This user function takes the data in the relax data store and creates a NESSY save file to be opened within NESSY.  The backend is the new specific_analyses.relax_disp.nessy module.  For the GUI frontend, graphics for icons and the wizard have been taken from the NESSY repository file pics/nessy_new.png@r1088 in the trunk.
        * A script has been added to create the NESSY input for Flemming Hansen's CPMG data.
        * Updated the NESSY results for Flemming Hansen's CPMG data for the R2eff values with high precision errors.  A file containing the log or printouts from NESSY has been added for reference.
        * Updated the NESSY log from the Hansen CPMG data of residue 70 to remove the NESSY errors.  These were removed with the commit r1090 to the NESSY trunk.
        * Split up the r2eff_values.bz2 save file into the results files for each data pipe.  This is for Flemming Hansen's CPMG data truncated to residues 70 and 71.  This is to simplify the system tests which use this data.
        * Large simplification of the Relax_disp system tests using Hansen's CPMG data.  Instead of calculating the R2eff values in the test, these are read from the high error precision results files in test_suite/shared_data/dispersion/Hansen.  This allows the model parameters to be consistently found and to be identical between different runs of the test.
        * Added a file which compares the results for the LM63 model with Hansen's CPMG data between all programs.  This currently includes relax, NESSY and CPMGFit.
        * Added a printout to the specific_analyses.relax_disp.cpmgfit.translate_model() function.
        * The dispersion system test script for Hansen's CPMG data can now run stand-alone.
        * The log barrier constraint algorithm is now used for the relaxation dispersion optimisation.  This is to allow constraints in the absence of gradient target functions.  The constraints have been turned on by default in the auto-analysis.
        * Changed the dispersion GUI tab to use the model names from specific_analyses.relax_disp.variables.
        * The spectrum wizard now uses the spectrometer.frequency user function rather than frq.set.  The frq.set user function is now called spectrometer.frequency.
        * An upper limit of 200 rad/s has been added to the linear constraints for the R2 dispersion parameters.
        * Fixes for the checking in the Relax_disp.test_hansen_cpmgfit_input system test.
        * The relaxation dispersion auto-analysis now calls the relax_disp.plot_disp_curves user function.  This user function is not implemented yet, but will be used to create plots of the dispersion curves.
        * Implemented a basic graph for the relax_disp.plot_disp_curves user function.  This simply plots out the nu_CPMG value or spin-lock field verses the R2eff/R1rho values from the experiment.  The graph of the back calculated R2eff/R1rho values from the model fit is still to be added.
        * Fix for the linear constraints for the 'R2eff' model.  The A and b matrices are no longer set to None, as this kills the auto-analysis or any analysis when constraints are turned on.  Now the constraints 0 <= R2eff <= 200 and I0 >= 0 are used.
        * Fixes for the peak intensity loading wizard for the frq.set to spectrometer.frequency user function change.
        * Fixes for the backend of the relax_disp.plot_exp_curves user function.  This code needed to be updated for the major changes in the relax_disp branch.
        * Fixes for the checks in the Relax_disp.test_exp_fit system test.  The r2eff and i0 spin data structure keys are now strings.
        * Two class variables have been added to the dispersion auto-analysis for fast optimisation.  This includes variables for the function tolerance and maximum number of iterations, and matches those of the model-free auto-analysis of the dauvergne_protocol module.  These will be used to speed up the test suite.
        * Speed up of the system tests using Flemming Hansen's CPMG data.  The grid search increments, function tolerance and maximum number of iterations have all been made looser.
        * Added parameter checks to the Relax_disp.test_hansen_cpmg_data_LM63 system test.
        * Fix for the phi_ex dispersion parameter scaling - the scaling was in the wrong direction.
        * Added a directory of relax results for the truncated high-precision Hansen CPMG R2eff values.  This uses the base_pipe.bz2 and r2eff_pipe.bz2 files with the high-precision R2eff errors, and hence can be compared to the NESSY and CPMGFit results.
        * Added the residue :71 results to the lm63_comparison file.  This is a summary of the optimisation results using the high-precision R2eff error results for the different dispersion softwares.
        * Changes to the dispersion auto-analysis write_results() method.  This is to output more of the dispersion parameters to text files and 2D grace plots.
        * Created a directory and script in preparation for the relax_disp.sherekhan_input user function.
        * Created the relax_disp.sherekhan_input user function.  This includes an icon for the GUI, and the full front and backends.
        * Added a wizard graphic for the relax_disp.sherekhan_input user function.
        * Shifted the core of the model_loop() dispersion method into its own function.  The new function specific_analyses.relax_disp.disp_data.loop_cluster() can now be used by other parts of relax.  The model_loop() method now yields the data that loop_cluster() yields.
        * Redesign of the relax_disp.sherekhan_input user function to handle spin clustering.
        * Added the ShereKhan results for the high-precision R2eff data for Hansen's CPMG data.
        * Converted the readme file for Flemming Hansen's CPMG data directory to uppercase.
        * Updated the LM63 model comparison table.
        * Modified the dispersion calculate() method for the R2eff values to use the analytic equation.  For the R2eff/R1rho values calculated for the fixed time period dispersion experiments via the calc user function, the very slow and tedious bootstrapping approach has been replaced by the very quick direct error calculation.  The two techniques produce the same results as the bootstrap simulation number approaches infinity.
        * Bug fix for the peak intensity error analysis in the dispersion auto-analysis.  Now the error analysis is split based on the magnetic field strength.  Previously the analysis was a mess with the split often being individual spectra.
        * The proper experiment type is now set for the Relax_disp.test_hansen_trunc_data GUI test.
        * Updated the relax_disp.exp_type user function to be more specific an include more experiment types.
        * Updated the specific_analyses.relax_disp.variables module for the relax_disp.exp_type changes.
        * The relax_disp.relax_time page is now always shown in the peak intensity wizard for the dispersion GUI.  This number is needed for the fixed time period experiments as well to calculated the R2eff/R1rho values and errors.
        * Fix for the dispersion auto-analysis write_results() method.  The i0 parameter text file and 2D Grace file are now only produced for the 'R2eff' model with the exponential curve base data types.
        * Simplified the Relax_disp.test_hansen_trunc_data GUI test.  The 'CR72' model is now deactivated and the grid search sized decreased from the default of 21 to 4.
        * Big speed ups of the Relax_disp.test_hansen_trunc_data GUI test.  The optimisation function tolerance and maximum number of iterations are now set to the same low precision as the system tests.  This involves adding hidden variables to the dispersion GUI analysis.
        * Removed the data pipe name check from the Relax_disp.test_hansen_trunc_data GUI test.  This makes no sense as this analysis generates a data pipe for each model (similar to the model-free analysis).
        * Fix for the relax_disp.exp_type call in the Relax_disp.test_exp_fit system test script.
        * Better formatting of the references for the dispersion analytic model equations.
        * Updated the relax_disp.select_model user function frontend for the CR72 dispersion model.  This includes fixing the parameter list and the equations presented to the user.
        * Removed the commented out junk model code from the relax_disp.select_model user function frontend.
        * Added the CR72 model equations to the relax library.  This is for the Carver and Richards 1972 2-site exchange model covering all time scales.
        * Initial implementation of the CR72 target function.
        * Import fix for the lib.dispersion.cr72 module.
        * Fixes to the specific_analyses.relax_disp modules to add support for the CR72 dispersion model.  The parameters for the CR72 model are now both correct and correctly handled.
        * Fix for the spin container list of parameters for the CR72 model.
        * The CR72 dispersion model equations are now more robust against math domain errors.  This is for the trigonometric functions which cannot handle certain input values.
        * Renamed the file for comparing different dispersion software with Flemming Hansen's CPMG data.
        * Added the initial results of the CR72 model in relax for Flemming Hansen's truncated CPMG data.
        * Simplified the pA >= pB constraint in the dispersion linear_constraints() function.
        * Fixes for the dispersion linear_constraints() function.  The indices were being incorrectly handled - the i and k index should be one and the same parameter index.
        * Added support for the 'CR72' or 'Full_CPMG' model to the relax_disp.cpmgfit_input user function.
        * Added the results for the CR72 model optimisation in CPMGFit using Flemming Hansen's truncated CPMG data.
        * Added the CR72 model results to the software comparison document for Hansen's CPMG data.
        * Improvements for the phi_ex and dw relaxation dispersion model parameters.  These are now stored with the units of ppm^2 and ppm respectively.  The conversion to (rad/s)^2 and rad/s units respectively now is spin specific, allowing mixed spin types (1H, 13C, 15N, etc.) to be analysed simultaneously.
        * Updated the relax results for Hansen's CPMG data for the recent phi_ex and dw changes.
        * Fixes for the CPMGFit results in the software comparison table for Hansen's CPMG data.
        * Fix for the grid search setup for the pA dispersion parameter.  As pA > pB, then the region from 0.0 to 0.5 does not need to be searched.
        * The back calculated R2eff values are now stored for dispersion analysis after minimisation.
        * Fix for the CR72 model equation in lib.dispersion.cr72.r2eff_CR72().  The eta scaling factor was incorrect.
        * Updated the relax results for the truncated CPMG data from Flemming Hansen.  This is for the recent fixes of the CR72 model equations.  Now relax produces identical results to ShereKhan for the LM63 and CR72 models.
        * Created a directory for holding relaxation dispersion sample scripts.
        * Added the model for no chemical exchange relaxation to the dispersion analysis.
        * Updated the NESSY log file for its improved printouts.  These printouts allow the R20 values to be accessed.
        * Another update of the NESSY log for the improved and more detailed printouts.
        * And again, another update of the NESSY log.
        * Added the relax results for the 'No Rex' model.
        * Updated the software comparison tables for the model of no exchange.  This is for Flemming Hansen's truncated CPMG data.
        * Fix for the Relax_disp system tests using Flemming Hansen's truncated CPMG data.  The nuclear isotope is now being set.
        * Increased the grid size for the hansen_data.py system test script.  This is needed to allow the parameters to be reliably found.
        * Fixes for the checks and printouts of the Relax_disp.test_hansen_cpmg_data_LM63 system test.
        * Updated some NESSY results in the software comparison document.
        * Fix for the CPMGFit batch file creation.  The command line options are now correct and output is redirected to output files.
        * Updated the CPMGFit batch file.
        * Created the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  This is designed to fully test the dispersion auto-analysis for CPMG-type data.
        * Fix for the Relax_disp.test_hansen_cpmgfit_input system test.  This is for the recent CPMGFit batch file changes.
        * Better checking of optimisation in the Relax_disp system tests.  This affects the Relax_disp.test_hansen_cpmg_data_LM63 and Relax_disp.test_hansen_cpmg_data_CR72 system tests.  Instead of using the auto-analysis, these tests now set the initial parameters close to the minimum, skip the grid search, and perform a low precision optimisation to reach the minimum.  This is important because the low quality grid search and optimisation can not always find the real minimum.
        * Created the lib.dispersion.equations.calc_two_point_r2eff_err() function.  This complements the lib.dispersion.equations.calc_two_point_r2eff() function and is used by the dispersion calculate() method to abstract the mathematics.
        * Updated the relax_disp.select_model user function docstring for the R2eff error analysis.  This properly describes how the R2eff/R1rho errors are calculated for the fixed relaxation time period experiments.
        * Docstring fixes for the lib.dispersion.equations module.
        * Expanded the number of model list variables in specific_analyses.relax_disp.variables.  This is to include lists which are specific to CPMG-type and R1rho-type experiments.
        * Added the new 'M61' model to the specific_analyses.relax_disp.variables module.  This is the Meiboom 1961 model for 2-site fast exchange for R1rho-type experiments.
        * Added the M61 model to the relax_disp.select_model user function frontend.  This is the Meiboom 1961 model for 2-site fast exchange for R1rho-type experiments.
        * Added the M61 model equations to the relax library.  This is for the Meiboom 1961 2-site fast exchange model for R1rho-type experiments.
        * Created the M61 2-site fast exchange dispersion model target function.  This is for the Meiboom 1961 model for 2-site fast exchange for R1rho-type experiments.  The code for the func_M61() method was copied without modification from the func_LM63() method.
        * Added support for the R1rho-type experiments to the relaxation dispersion analysis in the GUI.  This involves using a different model list for these experiments compared to the CPMG-type experiments.
        * Updated the relaxation dispersion GUI to handle the current set of experiment types.
        * Fix for the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  The correct model list is now being used - the R1rho-type experiments should not be included.
        * Fix for the missing import of the lib.dispersion.equations.calc_two_point_r2eff_err() function.
        * Added support for the M61 model to the relax_disp.select_model user function back end.  This is for the Meiboom 1961 2-site fast exchange model for R1rho-type experiments.
        * Another fix for the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  The correct model list is finally being used.
        * Fix for the lib.dispersion.equations.calc_two_point_r2eff_err() function.  The variables were incorrectly named.
        * Added support for setting the spin isotope information in the dispersion GUI.  A new Text_ctrl element has been added just after the spin system GUI element.  This displays a list of all the spin isotopes currently defined and is updated after every GUI user function call.  The button of the element launches the spin.isotope user function.  The spin isotope information is now checked for prior to executing the GUI analysis and added to the missing list to present to the user when blocking the execution of the analysis.  The dispersion GUI test has been updated to use this new element.
        * Added support for model selection to the relaxation dispersion specific analysis package.  This involved redesigning the model_loop() method.  Instead of yielding both the spin containers and the spin IDs, now only spin IDs are yielded.  This is important as the model loop is used independently of the data pipes.  Hence the spin containers cannot be yielded as multiple pipes are compared within the model loop.  The auxiliary method _spin_ids_to_containers(spin_ids) has been added to obtain the list of spin containers from the list of spin IDs.  To support model selection, the methods duplicate_data(), model_desc() and model_statistics() have been added, and model_type() aliased to the common _model_type_local() method.
        * Expanded the relaxation dispersion auto-analysis.  A final step of model selection has been added to select between the different models for each spin cluster.  This is stored in the 'final' data pipe, and its results output via the write_results() method.
        * The model selection technique can now be changed in the dispersion auto-analysis.
        * The error when selecting a non-existent model using relax_disp.select_model is now more informative.
        * Model selection in the dispersion auto-analysis is only performed if 2 or more models are present.  Excluding the 'R2eff' model, if only 0 or 1 models are optimised, then model selection is skipped and a warning is given.  This avoids tracebacks in the model_selection user function.
        * Added some synthetic on-resonance R1rho data to the test suite.  This is in the form of Sparky peak list files containing two spin systems.
        * Expanded the synthetic on-resonance R1rho test suite data.  The data now consists of a full set of dispersion curves for the M61 model.
        * Added a reference to the synthetic on-resonance R1rho test suite data.  The first ncyc1 data point now has a relaxation time period of zero, hence it can be used as the reference for a fixed time period experiment.
        * The reference spectra can now be set in the relax_disp.spin_lock_field user function.  By setting the field to None, the reference spectrum for a fixed relaxation time period experiment type can now be specified.  This mimics the behaviour of the relax_disp.cpmg_frq user function.
        * Added some error checking to the specific_analyses.relax_disp.disp_data.average_intensity() function.  This is for better feedback to the user in case they have not set up their data correctly.
        * The relax_disp.select_model user function now operates without the spectrometer frequency being set.  The special loop_frq() function is now used as this can handle missing spectrometer frequency information.
        * The find_intensity_keys() function can now handle the reference spectrum.  This function in the specific_analyses.relax_disp.disp_data module was failing if the relaxation time period for the reference spectrum was missing.  Time information shouldn't be needed for the reference, so is no longer checked.
        * The dispersion specific optimisation methods can now handle missing spectrometer information.
        * The return_index_from_frq() now handles missing frequency information.  This is in the specific_analyses.relax_disp.disp_data module.
        * Better support for missing frequency information in the specific_analyses.relax_disp.disp_data module.  This is in the return_index_from_frq() function which now returns an index of 0, and in return_r2eff_arrays() which skips calculating the frequency information.
        * The dispersion disassemble_param_vector() function now handles missing spectrometer information.  The loop_frq() function replaces direct looping over cdp.spectrometer_frq_count.
        * Variable renaming in the lib.dispersion.m61 module.  The variable names are now more suited to R1rho-type data, rather than CPMG-type data.
        * Fix for the M61 model target function.  The spin-lock fields need to be used, not the CPMG frequencies.
        * Created the Relax_disp.test_r1rho_on_res_fixed_time_m61 system test.  This checks the R1rho-type experiment with a fixed relaxation time period using the 'R2eff' and 'M61' models.  It uses the auto-analysis for this, and the 'r1rho_on_res' synthetic relaxation data.
        * Created the Relax_disp.test_r1rho_on_res_exponential_m61 system test.  This is identical to the Relax_disp.test_r1rho_on_res_fixed_time_m61 system test except that the full exponential curves are used rather than the 2-point fixed time approach.
        * Python 3 fixes for the relaxation dispersion parameter Grace strings.
        * Python 3 fixes for the modules of the specific_analyses.relax_disp package.
        * Fix for a bug preventing the optimisation of the dispersion models.
        * Fixes for the file permission setting on the CMPGFit batch script.  The correct file mode is now set for Unix-based systems.
        * Python 3 fixes for the relax_disp.cpmg_frq and relax_disp.spin_lock_field user functions.  The sorting of lists with None is not supported by Python 3, so this has to be carefully handled.
        * Removed the grid search size check from the dispersion _grid_search_setup() method.  This is performed by minfx anyway, and the code was incompatible with Python 3.
        * Fix for the Relax_disp.test_hansen_cpmgfit_input system test.  The frequencies for the CPMGFit input files now are only written to 10 places.  This is for Python 2 vs. 3 consistency.
        * Python 3 fix for the relax_disp.cluster user function.
        * Fix for the Grace plots created by the relax_disp.plot_disp_curves user function.  The data set from each frequency is now a separate set in the G0 graph.
        * Improvements to the relax_disp.plot_disp_curves user function.  The back-calculated R2eff/R1rho values are now included in the plot as separate sets.  In addition, the residuals have also been added to allow for a visual statistical comparison.
        * More improvements to the relax_disp.plot_disp_curves user function.  The data sets now have labels, and the residuals have errors set to those of the R2eff/R1rho data.
        * More improvements to the relax_disp.plot_disp_curves user function.  The graph axes maximum is now set to a reasonable value for the given data.
        * Added the 'No Rex' model to the relax script for optimising Flemming Hansen's CPMG data.
        * The isotope type is now set in the relax script for optimising Flemming Hansen's CPMG data.
        * Shifted the _spin_ids_to_containers() method to the disp_data.spin_ids_to_containers() function.
        * Fix for the relax_disp.sherekhan_input user function.  The loop_cluster() function no longer returns spin containers.
        * Fix for the r2eff_calc.py script for calculating R2eff values from Flemming Hansen's CPMG data.
        * Added a check to the dispersion specific minimise() function for the spectrometer field strength.  This is essential in all dispersion models to convert between ppm and rad/s units, or ppm^2 and (rad/s)^2 for the phi_ex parameter.
        * The r1rho_on_res_m61.py dispersion system test script now sets the spectrometer frequency information.
        * Removed cdp.model as this makes no sense - a different model can be used per spin cluster.  Now the variable cdp.model_type is used to identify the 'R2eff' model.  For all other dispersion models this variable is set to 'Disp'.
        * Added a log file for the data generation script for the r1rho_on_res dispersion data.
        * Fixes for the parameter checks in the system tests for the r1rho_on_res synthetic data.  This includes both the Relax_disp.test_r1rho_on_res_fixed_time_m61 and Relax_disp.test_r1rho_on_res_exponential_m61 tests.
        * Fixes for the lib.dispersion.m61.r2eff_M61() function.
        * Increased the precision of the Sparky peak lists for the r1rho_on_res dispersion test data.  All peak intensities are now 1000 bigger.  As the values are integers in the Sparky files, the previous values were too truncated for the system tests to properly optimise and find the original parameters.
        * Speed up of the r1rho_on_res_m61.py system test script.  The optimisation precision is now much lower.  And the peak intensity errors now have been scaled by 1000 just as the base data was in the previous commit.
        * Improvements for the parameter checks in the system tests for the r1rho_on_res synthetic data.  This includes both the Relax_disp.test_r1rho_on_res_fixed_time_m61 and Relax_disp.test_r1rho_on_res_exponential_m61 tests.
        * Clustering was accidentally turned off in the r1rho_on_res_m61.py system test script.
        * Created the specific_analyses.relax_disp.disp_data.count_frq() function.  This is for determining the number of spectrometer frequencies present, even if not data has been defined.
        * Loosened the checks for the Relax_disp.test_hansen_cpmg_data_CR72 system test.
        * Completely redesigned how parameters are handled in the relaxation dispersion analyses.  The key concept is that everything revolves around the new loop_parameter() function.  This is a generator function which loops over the parameters of a given cluster, yielding all the information required to access the parameter.  The other functions of the parameters module use loop_parameter() to sequentially handle each parameter.  This allows for huge simplifications of these functions.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  One of the models for one spin now optimises completely and the checks have all been loosened.
        * Fixes for the dispersion specific model_statistics() method.  This now handles spin clustering correctly.
        * Updated the results of relax's analysis of the truncated CPMG data from Flemming Hansen.
        * Updates for the model variable docstrings.
        * Added the 'M61 skew' model to the specific_analyses.relax_disp.variables module.  This is the Meiboom 1961 model for skewed populations (pA >> pB).  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'M61 skew' model to the relax_disp.select_model user function frontend.  This is the Meiboom 1961 model for skewed populations (pA >> pB).  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fixes for the spacing after some equations in the relax_disp.select_model docstring.
        * Simplifications and comment fixes in the lib.dispersion.m61.r2eff_m61() function.
        * Renamed the lib.dispersion.m61.r2eff_M61() function to r1rho_M61().
        * Added the M61 skew model equations to the relax library.  This is the Meiboom 1961 on-resonance 2-site model for skewed populations (pA >> pB).  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Created the M61 skew model target function.  This is the Meiboom 1961 on-resonance 2-site model for skewed populations (pA >> pB).  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the skewed condition (pA >> pB) to the specific_analyses.relax_disp.parameters module.  This is currently done by constraining pA to be greater than 0.85.
        * Added support for the M61 skew model to the relax_disp.select_model user function back end.  This is the Meiboom 1961 on-resonance 2-site model for skewed populations (pA >> pB).  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Big speeds ups of the lib.dispersion modules.  Many replicated calculations have been shifted outside of the dispersion point loop, as these only need to be calculated once per function call.  Some if statements have consequently been simplified.
        * Renamed the lib.dispersion.equations module to lib.dispersion.two_point.
        * Renamed the r1rho_on_res dispersion test suite data directory to r1rho_on_res_m61.
        * Created test data for the 'M61 skew' R1rho model.  This is the Meiboom 1961 on-resonance 2-site model for skewed populations (pA >> pB).  This commit follows step 7 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Created the Relax_disp.test_r1rho_on_res_fixed_time_m61b system test.  This is for the Meiboom 1961 on-resonance 2-site model for skewed populations (pA >> pB).  This commit follows step 7 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Small simplification of the lib.dispersion.m61b module.
        * Fix for the specific_analyses.relax_disp.disp_data.return_value_from_frq_index() function.  This cdp.spectrometer_frq_list list structure rather than the cdp.spectrometer_frq dictionary should be used.
        * Added a printout at the end of the optimisation of the final dispersion parameter values.
        * Modified the optimisation printout for better formatting.
        * Increased the precision of the hansen_data.py relaxation dispersion system test script.  This actually speeds up the test, as the Monte Carlo simulations are significantly speed up when the CR72 model optimises to the solution.
        * Updates for the pA dispersion parameter optimisation constraints.  The parameter is now limited to be between pB and 1.  In the case of the limit pA >> pB, then instead the constraint is between 0.85 and 1.
        * Updated the Relax_disp system tests.  This is for the recent precision change and constraint changes.
        * Fixes for the grid search for the 'M61 skew' dispersion model.  The pA parameter search is now between 0.85 and 1.
        * Fixes for the func_M61b() dispersion target function.  This is the Meiboom 1961 on-resonance 2-site model for skewed populations (pA >> pB).
        * Small changes to the r1rho_on_res_m61b dispersion test data.  One R20 rate has been increased.
        * Completed the lib.dispersion.m61.r1rho_M61() function.  Now the R1 relaxation rate and rotating frame tilt angle are correctly handled.  This is not used in the target functions as support for the R1 and offset is not yet implemented.
        * Added the 'DPL94' model to the specific_analyses.relax_disp.variables module.  This is the David, Perlman and London 1994 R1rho 2-site fast exchange model.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'DPL94' model to the relax_disp.select_model user function frontend.  This is the David, Perlman and London 1994 R1rho 2-site fast exchange model.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Updates to the Relax_disp.test_r1rho_on_res_fixed_time_m61b system test.
        * Added the DPL94 model equations to the relax library.  This is the David, Perlman and London 1994 R1rho 2-site fast exchange model.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Created the DPL94 model target function.  This is the David, Perlman and London 1994 R1rho 2-site fast exchange model.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the DPL94 model to the relax_disp.select_model user function back end.  This is the David, Perlman and London 1994 R1rho 2-site fast exchange model.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Created the Relax_disp.test_r1rho_on_res_fixed_time_dpl94 system test.  This is the David, Perlman and London 1994 R1rho 2-site fast exchange model.  This commit follows step 7 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'IT99' model to the specific_analyses.relax_disp.variables module.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'IT99' model to the relax_disp.select_model user function frontend.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Updated the model lists of the dispersion analyses GUI element.  This adds the IT99 CPMG-type model and the DPL94 and M61B R1rho-type models.
        * Fixes for the IT99 model description in the relax_disp.select_model user function.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the IT99 model equations to the relax library.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the it99 module to the lib.dispersion package __all__ list.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Created the IT99 model target function.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fix for the lib.dispersion.it99 module.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the support for the pA.dw^2 parameter 'padw2' to the dispersion specific analysis.  This is needed for the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 5 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the IT99 model to the relax_disp.select_model user function back end.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the support for the tex parameter (tex = 1/(2kex)) to the dispersion specific analysis.  This is needed for the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 5 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the IT99 model to the relax_disp.cpmgfit_input user function.  This is the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.
        * Fix for the relax_disp.cpmgfit_input user function for when no directory is given.  This was causing tracebacks.
        * Fix for the LM63 model for the relax_disp.cpmgfit_input user function.  The grid search was incorrectly set up - the parameter is Tau, not tex.
        * Fixes for the IT99 model for the relax_disp.cpmgfit_input user function.
        * Changed the CPMGFit grid search options for the IT99 model in the relax_disp.cpmgfit_input user function.
        * Fix for the setup of the relaxation dispersion target functions for the IT99 model.
        * Added the relax optimisation results for the IT99 model applied to Flemming Hansen's CPMG data.
        * Removed an unnecessary calculation from the lib.dispersion.it99.r2eff_IT99() function.
        * Added the IT99 model to the software comparison table for Hansen's CPMG data.  This includes only the results from relax (and possibly not fully debugged results at that).
        * Replaced '-' with 'N/A' if the software is missing the model.  This is for the software comparison table using Flemming Hansen's CPMG data.
        * Updated the CPMGFit results for the IT99 model using Flemming Hansen's CPMG data.
        * Fixed the scaling of the parameter tex.
        * Fixes for the lib.dispersion.it99 module.  This is mainly because the omega_1eff parameter was not being correctly converted from the nu_cpmg values.
        * Updated the relax results for Flemming Hansen's CPMG data for the IT99 model fixes.
        * Fixes for the relax_disp.cpmgfit_input user function for the IT99 model grid search options.
        * Updated the CPMGFit results for the IT99 grid search fixes of the last commit.
        * Basic fix for the checks of the Relax_disp.test_hansen_cpmgfit_input user function.  The 'tex' parameter is now set as 'Tau'.
        * Disabled the Relax_disp.test_r1rho_on_res_fixed_time_m61b system test as the 'M61b' model is rubbish.The model cannot be properly optimised as the parameters are not independent of each other.
        * Fixes for the dispersion specific code.  The Grace graph code of lib.software.grace no longer accepts the axis min and max arguments.
        * Created the Relax_disp.test_bug_20889_multi_col_peak_list system test to catch bug #20889.  The report is https://gna.org/bugs/?20889.
        * Fixes for the Relax_disp.test_bug_20889_multi_col_peak_list GUI test.
        * Fixes for the checks of the Relax_disp.test_bug_20889_multi_col_peak_list GUI test.  Intensity errors will not have been calculated yet, and the structure is called baseplane_rmsd anyway.
        * Fix for the Relax_disp.test_bug_20889_multi_col_peak_list GUI test.  The peak intensity wizard _ok() method is now called to terminate the wizard.  Otherwise this causes the subsequent GUI test which tries to access the peak intensity wizard to fail.
        * Created the Relax_disp.test_hansen_cpmg_data_IT99 system test.  This is for testing the Ishima and Torchia 1999 2-site model for all timescales with pA >> pB.  This commit follows step 7 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Initialised the relaxation dispersion chapter in the relax manual.
        * Added 600x600 pixel version of the relaxation dispersion analysis graphic.  This is for use in the relax manual.
        * Fix for the definition of the \Ronerho LaTeX command for the relax manual.
        * Added EPS versions of the nessy and relax_disp 128x128 icons for the relax manual.
        * Added icons of all the sizes for ShereKhan.
        * Updated the relaxation dispersion 128x128 EPS icons to be the correct size and colour.
        * Updated the relaxation dispersion analysis EPS graphic to be the correct size and colour.
        * Copied the tutorial for adding dispersion modes to relax into the manual.  This was copied from http://article.gmane.org/gmane.science.nmr.relax.devel/3907.
        * Editing of the tutorial for adding dispersion models in the relax manual.
        * Edits of the relax_disp.select_model user function docstring.
        * Added all of the contents of the relax_disp.select_model user function docstring to the manual.
        * The relaxation dispersion parameters are now defined in the main manual LaTeX file.
        * Added a couple of sentences about bit rot to the dispersion chapter of the relax manual.  This is to the test suite part of the tutorial on adding new dispersion models.
        * The dispersion auto-analysis now saves the final program state before terminating.
        * Shifted the dispersion specific Grace plotting code into specific_analyses.relax_disp.disp_data.  The private _plot_disp_curves() and _plot_exp_curves() methods of the analysis specific object are now public functions of the specific_analyses.relax_disp.disp_data module.
        * Removed the state.save user function calls from the relax scripts for Hansen's CPMG data.
        * Updated the model lists for the relax scripts for Flemming Hansen's CPMG data.
        * Added a sample script for the relaxation dispersion analysis of CPMG-type data.
        * Added a preliminary icon set for spin clustering.
        * The relax_disp.cluster user function GUI menu entry now uses the cluster icon.
        * Created a very basic GUI element for the dispersion analysis for clustering.  This is simply to make this feature more obvious.  The button just launches the relax_disp.cluster user function.
        * Modified the experiment type descriptions in the dispersion GUI.
        * Shifted the spin cluster GUI element to be just after the spin system GUI element.  This is simply a more logical placement.
        * Modified the title of the dispersion auto-analysis GUI element, removing the 'Setup for' text.
        * Removed some unused imports from the CPMG dispersion analysis sample script.
        * Added the CPMG dispersion analysis sample script to the relax manual.
        * Epydoc docstring fixes for all of the modules of the lib.dispersion package.
        * Alphabetical ordering of imports.
        * Shifted the core of the relaxation dispersion API object into its own api module.  This is to simplify the relax import cascade - by removing the code from the specific_analyses/relax_disp/__init__.py file, the import of the package no longer results in the imports of other relax modules and packages.
        * Expanded the modelling of dispersion data section of the relax user manual.
        * Expansion of the modelling of dispersion data section of the relax user manual.
        * The relaxation dispersion auto-analysis now outputs text and Grace files for all parameters.  This is in response to bug #20917 (https://gna.org/bugs/?20917) submitted by Troels Linnet (https://gna.org/users/tlinnet).
        * The Monte Carlo simulations now generate parameter errors for the relaxation dispersion analysis.  The simulation index was being ignored, hence the input data was never the randomised data and all errors were zero.
        * Removed many decimal points from the MHz value in the Grace plots from relax_disp.plot_disp_curves.
        * Added support for converting between kex and tex, and pA and pB for the dispersion analysis.  This is performed by the new specific_analyses.relax_disp.parameters.param_conversion() function.  For this, most of the code from the assemble_param_vector() function has been shifted into get_value(), and most of disassemble_param_vector() into set_value().  The dispersion analysis now also has a custom sim_init_values() method to handle these parameters.
        * Added support for calculating auxiliary parameter errors for the dispersion analysis.  This is via the monte_carlo.error_analysis user function.  The errors for the parameter pairs kex-tex and pA-pB for the non-model parameter are now calculated as well.
        * Fix for the dispersion auto-analysis - pA and pB parameters are no longer output for the IT99 model.  These are not parameters of this model.
        * Updated the relax results for Flemming Hansen's truncated CPMG data for all the recent changes.
        * Fix for bug #20916, (https://gna.org/bugs/?20916) - Suggestion for Python script for PNG/EPS/SVG conversion of grace files.  Troels Linnet provided this patch, and was discovered during work on a Windows 7 system.  This patch will provide a grace2images.py file in each folder where a call to specific_analyses/relax_disp/disp_data.py is called.  It is called in plot_disp_curves(dir=None, force=None) and call the function lib.software.grace.script_grace2images().  The conversion script can be executed in Linux and Windows, if the PATH to xmgrace has been specified.  It will look in a folder for grace files of ending *.agr and by default convert to PNG.  One can also convert to EPS and SVG.  Probably more options could be added, as PDF.  The conversion depends on xmgrace compilation, and so PNG conversion is for fast inspection of graphs in folder, and EPS for further external conversion to PDF etc.  The patch, the output file, and small script to test is attached.  I miss to make the file executable in relax, so the script can be executed directly in Linux.
        * Mac OS X bug fix for the new analysis GUI wizard.  The blank button is now using the blank_150x150.png file instead of no image, preventing nasty wxPython bugs from appearing on that system.
        * Fix for bug #20917 (https://gna.org/bugs/?20917).  The problem is that the Grace files for each spin system are not created by the relax_disp.plot_disp_curves user function as the ':' character cannot be placed in a file name in MS Windows.  All of the file name from the ':' onwards is lost.  The solution is to replace each of the characters '#:@' in the spin ID string with '_'.
        * Another update of the relax results for Flemming Hansen's truncated CPMG data.  This includes the grace2images.py script creation contributed by Troels Linnet (https://gna.org/users/tlinnet) and the change of the file name of the per-spin dispersion curves.
        * The value checks in the Relax_disp.test_hansen_cpmg_data_auto_analysis system test are now less precise.  This is to allow the tests to pass on certain MS Windows systems.
        * Fix for the setting of the execute permissions on the grace2images.py scripts.  The problem was identified in the post at http://thread.gmane.org/gmane.science.nmr.relax.devel/3953/focus=4000.  This is within the relax_disp.plot_disp_curves user function after the grace2images.py script has been created.  The commit matches the changes from trunk for the Modelfree4 batch script.
        * Shifted from argparse to optparse in the grace2images.py scripts from relax_disp.plot_disp_curves.  This is associated with bug #20916 (https://gna.org/bugs/?20916) and the change suggested in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/3953/focus=4000.  The argparse module is only available from for Python 2.7.3 (the version with many Python 3 features backported) and Python >= 3.2.  The module has been replaced with the similar optparse module as used by relax, and which available in all Python version supported by relax.
        * Updated the grace2images.py scripts created by the relax_disp.plot_disp_curves user function.  This was discussed in bug #20916 (https://gna.org/bugs/?20916) and the change suggested in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/3953/focus=4000.  Improved that both small and big letters for image types can be used on the command line.
        * Converted the relaxation dispersion chapter of the user manual to the lstlisting environment.  This matches the changes occurring within the trunk.
        * Added an EPS version of the 128x128 cluster icon for the user manual.
        * Renamed the LaTeX file for the relaxation dispersion chapter of the user manual.
        * Completed the script UI section of the relaxation dispersion chapter of the user manual.  The sample script is now fully explained.
        * Added a demonstration of why the Ishima and Torchia 2005 error formula is incorrect.  The script test_suite/shared_data/dispersion/error_testing/simulation.py has been added to simulate the fixed relaxation time period error propagation.  This produces the test_suite/shared_data/dispersion/error_testing/error_plot.agr Grace graph.  The formula, graph and a description has been added to the relax manual explaining everything.
        * Fix of the two-point dispersion error formula in the docs.  This includes the relax_disp.select_model user function docstring and the relax manual.
        * Loosened a parameter check in the Relax_disp.test_hansen_cpmg_data_IT99 system test to pass on certain Linux systems.
        * Small edit of the legend of the relaxation dispersion figure showing the Ishima & Torchia 2005 being wrong.
        * Added Paul Schanda's code for the numerical solution to the Bloch-McConnell equations for 2-sites.  This is specifically code which uses complex conjugate matrices.  The code was submitted at http://thread.gmane.org/gmane.science.nmr.relax.devel/4132.
        * Made the lib.dispersion.ns_2site_star module importable in the absence of Scipy.
        * Polished the lib.dispersion.ns_2site_star module docstring.
        * Added some code missing from the lib.dispersion.ns_2site_star module.  This code was accidentally not copied from http://thread.gmane.org/gmane.science.nmr.relax.devel/4132.
        * Significant speed ups of the lib.dispersion.ns_2site_star.r2eff_ns_2site_star() function.  Replicated calculations have been minimised.
        * Added the 'NS 2-site star' model to the specific_analyses.relax_disp.variables module.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the lib.dispersion.ns_2site_star module name to the package __all__ list.
        * Updated the lib.dispersion.ns_2site_star module with additional information from Paul Schanda.  The details come from http://thread.gmane.org/gmane.science.nmr.relax.devel/4132/focus=4135.  The exchange-free R2 value parameter names have been changed to match the convention of the other lib.dispersion modules.
        * Added the 'NS 2-site star' model to the relax_disp.select_model user function frontend.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fix for the non-ASCII character '\xe2' in the lib.dispersion.ns_2site_star module.
        * Created the 'NS 2-site star' model target function.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the R2B parameter as required by the 'NS 2-site star' model.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices.  This commit follows step 5 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'NS 2-site star' model to the relax_disp.select_model user function back end.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Better support for the R2A and R2B relaxation rate parameters in the relaxation dispersion analysis.  This includes a number of fixes to allow these two parameters to be handled correctly.
        * Added parameter conversions to go from pA and kex to kge and keg.  This is for the 'NS 2-site star' numerical model.  The conversions have been added to the start of the target function to minimise mathematical operations to speed up the code.
        * Added the missing mpower() function as lib.linear_algebra.matrix_power.square_matrix_power().  This is needed by the lib.dispersion.ns_2site_star module.  The function comes from the 'fitting_main_kex.py' file attached to comment 3 of task #7712 (https://gna.org/task/?7712#comment3, https://gna.org/support/download.php?file_id=18263).  The mpower() function was copied and modified to suite relax's coding conventions.
        * Added a module docstring to lib.linear_algebra.matrix_power.
        * Created the lib.dispersion.ns_matrices module.  This module contains a collection of functions for generating the relaxation matrices for the numerical solutions to the Bloch-McConnell equations for relaxation dispersion.  The code comes from the 'fitting_main_kex.py' file attached to https://gna.org/task/?7712#comment3(https://gna.org/support/download.php?file_id=18263).
        * Docstring fix for the lib.dispersion.ns_matrices.rcpmg_2d() function.
        * Added the functions for creating the X-axis pi-pulse rotation matrices in lib.dispersion.ns_matrices.  The code comes from the 'fitting_main_kex.py' file attached to https://gna.org/task/?7712#comment3(https://gna.org/support/download.php?file_id=18263).
        * Huge amounts of documentation added to the lib.dispersion.ns_2site_star module.  This comes from Paul Schanda's (https://gna.org/users/pasa) post at http://thread.gmane.org/gmane.science.nmr.relax.devel/4132/focus=4152
        * Spacing fixes for the lib.dispersion.ns_2site_star module as determined by the 2to3 program.  This is the Python 2 to 3 conversion program.
        * Docstring fix for the lib.dispersion.ns_2site_star.r2eff_ns_2site_star() function.
        * Comment updates in the lib.dispersion.ns_2site_star module.
        * Completed the conversion of the ground and excited states (G, E) to the A and B states.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4132/focus=4154.
        * Fixes for the construction of the complex conjugate matrix in lib.dispersion.ns_2site_star.
        * The chemical shift difference is now passed into lib.dispersion.ns_2site_star.  This is currently set to the fA parameter, though it is not yet clear if this is correct.
        * Basic fix for the lib.linear_algebra.matrix_power.square_matrix_power() function.
        * The fixed relaxation time period is now sent into the 'NS 2-site star' dispersion model.
        * Fix for the state G+E to A+B conversion in lib.dispersion.ns_2site_star.
        * The 'NS 2-site star' model is now more robust against math domain failures.  This includes the failure of the logarithmic of zero matrices.
        * Speed ups of the 'NS 2-site star' dispersion model optimisation.  The relaxation and magnitisation data structures are now initialised with the target function initialisation, rather than being created at each target function call.  The Rex and M0 matrices are now updated at the base of the target function rather than in the lib.dispersion.ns_2site_star module to minimise the number of mathematical operations per target function call.  And the M0 matrix has changed shape and a dot product is used in lib.dispersion.ns_2site_star to create Moft instead.
        * Shifted to using the faster numpy.linalg.matrix_power() function in lib.dispersion.ns_2site_star.  This was originally using the lib.linear_algebra.matrix_power.square_matrix_power() function, however the numpy equivalent is faster.
        * More speed ups of the 'NS 2-site star' dispersion model.  A number of calculations have been shifted to the target function initialisation code, avoiding unnecessary repetitive mathematical operations.
        * Improvement of the error handling in the 'NS 2-site star' model.  The fA and pB parameters are no longer being checked.  Instead a Mgx value of 0.0 is being checked for.  This catches additional problems.  And now instead of the R2eff value being set to zero, it is set to 1e99.  This is because log of zero is -inf, and then multiplied by a negative constant gives positive inf.
        * Docstring completion for lib.dispersion.ns_2site_star.r2eff_ns_2site_star().  Epydoc text was missing for some of the function arguments.
        * Changed 'numerical integration' to 'numerical solutions' in the dispersion chapter of the manual.
        * Reworked the dispersion chapter of the manual for the recent support of numerical models.  This includes better sectioning and section labelling and referencing, and the addition of the 'NS 2-site star' numerical model.  The model and parameter tables have been updated as well.
        * Added the 'NS 2-site star red' model to the specific_analyses.relax_disp.variables module.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices, whereby the simplification R20A = R20B is assumed.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Rewrote the relax_disp.select_model user function documentation.  All of the detailed model information has been removed as it is now in the relax user manual.  The model lists have been modified to match the analytic-numeric sectioning of the manual.
        * Added the 'NS 2-site star red' model to the relax_disp.select_model user function frontend.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices, whereby the simplification R20A = R20B is assumed.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Docstring fix for the lib.dispersion.ns_2site_star.r2eff_ns_2site_star() function.
        * Created the 'NS 2-site star red' model target function.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices, whereby the simplification R20A = R20B is assumed.  The code in common with the 'NS 2-site star' model has been shifted into the new calc_ns_2site_star_chi2() method.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'NS 2-site star red' model to the relax_disp.select_model user function back end.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices, whereby the simplification R20A = R20B is assumed.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS 2-site star red' model to the relax user manual.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations using complex conjugate matrices, whereby the simplification R20A = R20B is assumed.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fix for the Monte Carlo simulations for the numeric dispersion models.  The back-calculation method was not correctly initialising the target function class.
        * Added the 'CR72 red' model to the specific_analyses.relax_disp.variables module.  This is the Carver and Richards 1972 analytic model with the simplification R20A = R20B.  The current 'CR72' makes the same assumption, but that model will be expanded to support R20A and R20B later.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'CR72 red' model to the relax_disp.select_model user function frontend.  This is the Carver and Richards 1972 analytic model with the simplification R20A = R20B.  The current 'CR72' makes the same assumption, but that model will be expanded to support R20A and R20B later.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Created the 'CR72 red' model target function.  This is the Carver and Richards 1972 analytic model with the simplification R20A = R20B.  The current 'CR72' makes the same assumption, but that model will be expanded to support R20A and R20B later.  The code in common with the CR72 model has been shifted into the new calc_CR72_chi2() method.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'CR72 red' model to the relax_disp.select_model user function back end.  This is the Carver and Richards 1972 analytic model with the simplification R20A = R20B.  The current 'CR72' makes the same assumption, but that model will be expanded to support R20A and R20B later.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'CR72 red' model to the relax user manual.  This is the Carver and Richards 1972 analytic model with the simplification R20A = R20B.  The current 'CR72' makes the same assumption, but that model will be expanded to support R20A and R20B later.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * LaTeX improvements for the 'NS 2-site star red model' section of the dispersion chapter of the manual.
        * Expanded the CR72 model to handle both the R20A and R20B parameters.  The 'CR72 red' model now functions as the old CR72 model where R20A = R20B = R20.  All parts of the code have been modified.  The lib.dispersion.cr72.r2eff_CR72() function has been expanded to support the full Carver and Richards 1972 equations, dropping back to the simplified form if R20A = R20B.
        * Fix for the dispersion specific loop_parameters() method for the R20A and R20B parameters.  The frequency index is now correctly returned for these and the R20 parameter.
        * Better printouts of the R20A and R20B parameters at the end of minimisation.
        * Documentation fix for the lib.dispersion.cr72 module.
        * Small speed up for the lib.dispersion.cr72 module for the R20A != R20B case.  Replicated calculations have been minimised.
        * Added support for model nesting in the relaxation dispersion auto-analysis.  This involves copying the parameters from the simpler nested model rather than performing a full grid search.  This is currently used to handle all models with R20A and R20B parameters where a simpler model with the single R20 parameter is optimised first.
        * Improvements for the write_results() method of the dispersion auto-analysis.  The parameter value and Grace files are now correctly created for all the recent models.
        * Fix for the Relax_disp.test_hansen_cpmg_data_auto_analysis system test for model name change.  This is for the change from the 'CR72' model to 'CR72 red' model.
        * Added the 'NS 2-site' model to the specific_analyses.relax_disp.variables module.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations.  It originates as optimization function number 1 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS 2-site' model to the relax_disp.select_model user function frontend.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations.  It originates as optimization function number 1 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS 2-site' R2eff calculating function to the relax library.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations.  It originates as optimization function number 1 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Updates and fixes for the lib.dispersion.ns_2site module.  The function has been renamed, and the R1 arguments default to 0.0.  The flip angle for the from the pulse.
        * Created the 'NS 2-site' model target function.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations.  It originates as optimization function number 1 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Converted the 'NS 2-site' model to 'NS 2-site 3D' to be more specific.  This might change again in the future.
        * Added support for the 'NS 2-site 3D' model to the relax_disp.select_model user function back end.  This is the model of the numerical solution for the 2-site Bloch-McConnell equations.  It originates as optimization function number 1 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Lots of fixes for the relaxation dispersion target function module for the 'NS 2-site 3D' model.
        * Improvements to the nesting() method of the relaxation dispersion auto-analysis.  The use of the parameters of the simpler model in a nested pair now only works if the simpler model is in the model list.
        * Converted the pi-pulse propagator matrices to numpy array format.  This is to enable the use of the much faster numpy.dot() function for performing the dot products.
        * Speed ups for the 'NS 2-site 3D' model.  The pi-pulse propagator is created only once upon target function initialisation rather than for each function call, each spin cluster, each magnetic field strength, each dispersion point, and each CPMG block.
        * Modified the df, fA, and fB parameters to match the relax omega conventions of dw, wA, and wB.  This follows from Paul Schanda's confirmation at http://thread.gmane.org/gmane.science.nmr.relax.devel/4132/focus=4159.
        * Speed up for the lib.dispersion.ns_matrices.rcpmg_3d() function.  The pA and pB parameters are now sent into the function rather than being recreated by the function.
        * More changes to the numerical solution dispersion code to match relax's conventions.  This includes the changes of df->dw, fA->wA, fB->wB, and Mgx->Mx.
        * Added the 'NS 2-site 3D red' model to the specific_analyses.relax_disp.variables module.  This is the 'NS 2-site 3D' model with R20A = R20B = R20.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS 2-site 3D red' model to the relax_disp.select_model user function frontend.  This is the 'NS 2-site 3D' model with R20A = R20B = R20.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Created the 'NS 2-site 3D red' model target function.  This is the 'NS 2-site 3D' model with R20A = R20B = R20.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'NS 2-site 3D red' model to the relax_disp.select_model user function back end.  This is the 'NS 2-site 3D' model with R20A = R20B = R20.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Updated all of the numerical model sections of the dispersion chapter of the manual.  This includes additions for the 'NS 2-site 3D' and 'NS 2-site 3D red' models.
        * Updated the 'NS 2-site 3D' and 'NS 2-site 3D red' models in the dispersion chapter of the relax manual.  The models are now included in the tables and in the introduction.
        * Added support for nesting to the relaxation dispersion auto-analysis for the 'NS 2-site 3D*' models.
        * Added the 'NS 2-site expanded' model to the specific_analyses.relax_disp.variables module.  This is the numerical model for the 2-site Bloch-McConnell equations expanded using Maple by Nikolai Skrynnikov.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS 2-site expanded' model to the relax_disp.select_model user function frontend.  This is the numerical model for the 2-site Bloch-McConnell equations expanded using Maple by Nikolai Skrynnikov.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS 2-site expanded' R2eff calculating function to the relax library.  This is the numerical model for the 2-site Bloch-McConnell equations expanded using Maple by Nikolai Skrynnikov.  It originates as optimization function number 5 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fix for the lib.dispersion.ns_2site_expanded.r2eff_ns_2site_expanded() function.  The pg variable should have been pA and it needs to be sent into the function.
        * Created the 'NS 2-site expanded' model target function.  This is the numerical model for the 2-site Bloch-McConnell equations expanded using Maple by Nikolai Skrynnikov.  It originates as optimization function number 5 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'NS 2-site expanded' model to the relax_disp.select_model user function back end.  This is the numerical model for the 2-site Bloch-McConnell equations expanded using Maple by Nikolai Skrynnikov.  It originates as optimization function number 5 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fix for the relax_disp.select_model user function for the 'NS 2-site expanded' model.  There is only one R20 parameter as R20A = R20B in this model.
        * Added the 'NS 2-site expanded' model to the relax user manual.  This is the numerical model for the 2-site Bloch-McConnell equations expanded using Maple by Nikolai Skrynnikov.  It originates as optimization function number 5 from the fitting_main_kex.py script from Mathilde Lescanne, Paul Schanda, and Dominique Marion (see http://thread.gmane.org/gmane.science.nmr.relax.devel/4138, https://gna.org/task/?7712#comment2 and https://gna.org/support/download.php?file_id=18262).  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Large renaming of the relaxation dispersion models.  This includes both the analytic and numerical models.  All of the models with separate R20A and R20B parameters now have ' full' added to the end of the model name.  And all of the corresponding reduced models whereby R20A = R20B = R20 have had the trailing ' red' removed.  All descriptions and variable names have been updated to match.
        * Updated the dispersion auto-analysis write_results() method for the recent model changes.
        * Import fix for the 'NS 2-site expanded' dispersion model target function.
        * Fix for the lib.dispersion.ns_2site_expanded module for the missing sqrt() function import.
        * Simplified the test_hansen_cpmg_data_*() system tests by shifting most shared code into setup_hansen_cpmg_data().
        * Created the Relax_disp.test_hansen_cpmg_data_CR72_full system test for checking the 'CR72 full' model.
        * Expanded the dispersion target function class docstring to include all current dispersion models.
        * Updated the parameter checks in the Relax_disp.test_hansen_cpmg_data_CR72_full system test.
        * Fixes for all of the definitions of the k_AB and k_BA exchange parameters.  These were inverted in all parts of relax.  The changes only affect the numerical dispersion models.
        * Created the Relax_disp.test_hansen_cpmg_data_ns_2site_3D system test.  This checks the 'NS 2-site 3D' numerical dispersion model against some truncated CPMG data from Flemming Hansen.
        * Created the Relax_disp.test_hansen_cpmg_data_ns_2site_3D_full system test.  This checks the 'NS 2-site 3D full' numerical dispersion model against some truncated CPMG data from Flemming Hansen.  The parameter checks have not been updated as there appears to be a bug.
        * Created system tests for the rest of the numerical dispersion models.  These include Relax_disp.test_hansen_cpmg_data_ns_2site_expanded, Relax_disp.test_hansen_cpmg_data_ns_2site_star and Relax_disp.test_hansen_cpmg_data_ns_2site_star_full.  This checks the 'NS 2-site expanded', 'NS 2-site star', and 'NS 2-site star full' numerical dispersion models against some truncated CPMG data from Flemming Hansen.  The parameter checks have not been updated for the 'NS 2-site expanded' and 'NS 2-site star full' models as there appears to be bugs.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  The checks for the 'CR72 red' model are now against the 'CR72' model.  And the models optimised only now include 'No Rex', 'LM63', 'CR72', and 'IT99', massively speeding up the test.
        * Fixes for the lib.dispersion.ns_2site_expanded module.  These problems were identified using the Relax_disp.test_hansen_cpmg_data_ns_2site_expanded system test.  They correspond to the issues with the original fitting_main_kex.py program identified by Mathilde Lescanne in her post at http://thread.gmane.org/gmane.science.nmr.relax.devel/4144.
        * The Relax_disp.test_hansen_cpmg_data_ns_2site_expanded system test now passes.  The test has been set up to match Relax_disp.test_hansen_cpmg_data_CR72.  This allows the efficiency of each method to be compared by running the tests with the --time flag.
        * Fix for the model nesting method of the relaxation dispersion auto-analysis for deselected spins.
        * Added an upper constraint of 2e6 rad/s for the kex dispersion parameter.  This is to prevent slow optimisation to values in the order of 1e20 for models which fail.
        * Updated the model lists for the relax scripts for optimising Flemming Hansen's CPMG data.  The model lists now include the numeric models and the 'CR72 full' model.
        * The lib.software.grace.write_xy_header() can now set the legend fill pattern and font size.
        * The relax_disp.plot_disp_curves user function backend now sets clear legend boxes with smaller text.
        * Fix for the Grace string for the dw dispersion parameter.
        * Updated the parameter value checks in the Relax_disp.test_hansen_cpmg_data_CR72 system test.  The low precision parameters are slightly different because of the new upper constraint on kex, simply because optimisation is terminated early rather than optimisation giving different results.
        * Updated the rest of the dispersion system tests to check the correct parameter values.  It is currently assumed that the 'full' dispersion models are correct as there is currently no way of testing if they are not.  So the Relax_disp.test_hansen_cpmg_data_ns_2site_3D_full and Relax_disp.test_hansen_cpmg_data_ns_2site_star_full system tests have been updated to pass.
        * Modified how the relaxation dispersion auto-analysis handles Monte Carlo simulations.  Now there is a flag which allows per-model simulations to be enabled.  By default, simulations are now only performed at the end.  This is to allow for massive speed ups in the auto-analysis.
        * Modified the dispersion GUI analysis to not include all dispersion models.
        * Added Mathilde Lescanne to the copyright notices of the numeric dispersion code in the relax library.  The dates must still be checked and updated correctly.
        * Added support for the mc_sim_all_models flag for the dispersion auto-analysis in the GUI.  The new boolean auto-analysis GUI input element is being used for this purpose.
        * All of the numeric dispersion models are now much more robust.  The real part of the magnetization vector for the A state could, for some parameter combinations, be either negative or NaN.  These situations are now caught, and the R2eff value set to a very large number.
        * Sectioning improvements for the relaxation dispersion chapter of the relax user manual.
        * Added DOI numbers to a number of bibliography entries for quick links in the relax user manual.
        * Added the 'LM63 3-site' model to the specific_analyses.relax_disp.variables module.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'LM63 3-site' model to the relax_disp.select_model user function frontend.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'LM63 3-site' model to relaxation dispersion chapter of the relax user manual.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'LM63 3-site' R2eff calculating function to the relax library.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fixes for the 'LM63 3-site' model equations in the relaxation dispersion chapter of the user manual.
        * Created the 'LM63 3-site' model target function.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support to the relaxation dispersion analysis for the 'LM63 3-site' model parameters.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'LM63 3-site' model to the relax_disp.select_model user function back end.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'LM63 3-site' parameters to the specific_analyses.relax_disp.parameters module.  This is the Luz and Meiboom 1963 analytic model for three exchanging sites.  This commit follows step 5 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'LM63 3-site' model to the dispersion scripts for Flemming Hansen's CPMG data.
        * The relaxation dispersion auto-analysis can now resume if it has been interrupted.
        * Some fixes for the 'LM63 3-site' dispersion model.  The library code was not accepting the correct arguments and it was referencing a non-existent parameter, and the grid search setup was failing.
        * Added support for optimising the 'LM63 3-site' dispersion model with Art Palmer's CPMGFit.  This is for the relax_disp.cpmgfit_input user function.  This model in CPMGFit is called '3-site_CPMG'.
        * Python 3 fixes for the specific_analyses.relax_disp.disp_data module.
        * Fixes for the relax_disp.cpmgfit_execute user function backend.  This would hang if CPMGFit produced error messages.  Hopefully this is now fixed.
        * Updated the CPMGFit results for the 'LM63 3-site' model.  This is for the truncated CPMG data from Flemming Hansen.
        * Speed ups for the 'LM63 3-site' target function.  Some mathematical operations have been shifted from the library code into the target function so that is only calculates once per function call.
        * Updated the relax results for Flemming Hansen's truncated CPMG data for the 'LM63 3-site' model.
        * The dispersion auto-analysis now outputs files for the kB, kC, phi_ex_B, and phi_ex_C parameters.  This is in the write_results() method and is for creating text files and Grace plots for the 'LM 3-site' model.
        * Created some synthetic test data for the 'LM63 3-site' dispersion model.  This will be used to test CPMGFit and relax's implementations.
        * Updated the 'LM63 3-site' dispersion model test data.  The CPMG frequencies are now more realistic.
        * Removed the old Sparky peak lists for the 'LM63 3-site' dispersion model test data.
        * Added the new Sparky peak lists for the 'LM63 3-site' dispersion model test data.
        * Updated the reference Sparky peak lists for the 'LM63 3-site' dispersion model test data.
        * Missing import of the specific_analyses.relax_disp.variables.MODEL_LM63_3SITE variable.
        * Added scripts for calculating the R2eff values for the 'LM63 3-site' dispersion model test data.
        * Created the Relax_disp.test_r2eff_fit_fixed_time system test to show a failure in the auto-analysis.  This shows a failure of the R2eff fitting in the dispersion auto-analysis due to Monte Carlo simulations being run when the calc() function should be called.
        * Removed some parts of the Relax_disp.test_r2eff_fit_fixed_time system test.  The last lines were non-functional.
        * Fix for the dispersion auto-analysis if not enough models have been input for a final run.  The final model selection, Monte Carlo simulation, and results writing stage of the auto-analysis now only occurs when enough models are present for model selection.
        * Fix for the dispersion auto-analysis for when only the single R2eff model is optimised.  This is for the case of exponential curve fitting, and allows Monte Carlo simulations to proceed even when the mc_sim_all_models flag is False.
        * Removed some unused parts of the r2eff_calc.py script and added the results file.
        * Made the 'LM63 3-site' dispersion model test data more realistic.  Previously all the rates were within a few decimal places of the R20 values.  Now the dispersion is much more significant.
        * Modified the 'LM63 3-site' dispersion model test data again.  This time the data has been changed to be that of two residues rather than two spins.
        * Another update of the 'LM63 3-site' dispersion model test data.  This data now makes CPMGFit happy.
        * Added the CPMGFit results for the 'LM63 3-site' dispersion model test data.
        * Added the relax results for the 'LM63 3-site' dispersion model test data.
        * Added a warning not to use the 'LM63 3-site' model to the dispersion chapter of the user manual.
        * Added the 'LM63 3-site' dispersion model to the model list in the GUI.  It is not selected by default.
        * Updated the Noe.test_noe_analysis system test.  These were the changes to the lib.software.grace.write_xy_header() function.
        * Fix for the model equivalence setup in the nesting() method of the dispersion auto-analysis.  This is the use of the analytic CR72 model parameters for the numeric models to avoid the grid search.
        * Removed a double full stop in the relax_disp.select_model docstring.
        * Updates for the test suite data script for optimising Flemming Hansen's CPMG data.  The model list has been shorted to the useful models, and the grid search size is now reasonable.
        * Updated the software_comparison file for the numeric model results from relax.  This is the file comparing the results for residues 70 and 71 from Flemming Hansen's CPMG data.
        * Updated the numeric model results for the software_comparison file.
        * Updated the relax results for Flemming Hansen's truncated CPMG data.  This includes the 'CR72 full' model and all the numeric models (excluding the *full models).
        * Added Dominique Marion to the copyright notices of all the lib/dispersion/ns_*.py files.  This is in response to Paul Schanda's message at http://thread.gmane.org/gmane.science.nmr.relax.devel/4225/focus=4226.
        * Small fix for the relax_disp.cluster documentation.
        * Added the new pre_run_dir argument to the relaxation dispersion auto-analysis.  This is to enable clustered optimisation.  This specifies a directory containing a completed analysis.  The parameters from this previous run will be used as the starting point for optimisation of the clustered analysis.
        * Fix for the Monte Carlo simulations for the dispersion auto-analysis failing under certain conditions.  The wrong variable was being checked to see if more than two models were being optimised.
        * The dispersion minimisation() method now skipped deselected spin clusters.  This is defined as all spins of the cluster being deselected.
        * Implemented the new relax_disp.parameter_copy user function.  This is used to copy relaxation dispersion parameters from one data pipe to another, taking cluster averaging into account.  It is used by the dispersion auto-analysis to handle clustering.
        * Added an element to the dispersion GUI analysis for specifying the directory of previous results.  This is used for the pre_run_dir argument for the dispersion auto-analysis.
        * Reactivated Monte Carlo simulations for the 'R2eff' model for exponential data curves.  This is within the optimise() method of the dispersion auto-analysis.
        * Updated the intro chapter of the user manual for the now supported dispersion analysis.  This is no longer listed as a future to be implemented feature.
        * Updated the screenshot of the analysis selection wizard to include the dispersion analysis.  This new figure has been updated in the intro chapter of the relax user manual as well.
        * Renamed an instance of 'numerical simulation' in the dispersion chapter of the manual.
        * Fix for the final data pipe in the dispersion auto-analysis.  The final data pipe is now placed in the data pipe bundle.  This is needed to allow the final state file to be opened in the GUI with an associated GUI analysis tab.
        * Fixes for the clustering display in the GUI.  This is for the relaxation dispersion GUI analysis tab.
        * Updated the README file for Dr. Flemming Hansen's CPMG data in the test suite.
        * Added Martin Tollinger to the copyright of the lib.dispersion.ns_2site_expanded module.  This follows Martin's post at http://article.gmane.org/gmane.science.nmr.relax.devel/4276.
        * Added links to all of the copyright licensing agreements for the lib.dispersion.ns_2site_expanded module.
        * Added Nikolai Skrynnikov to the copyright notice of the lib.dispersion.ns_2site_expanded module.
        * Added the 'TP02' model to the specific_analyses.relax_disp.variables module.  This is the Trott and Palmer 2002 R1rho analytic model for 2-site exchange.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'TP02' model to the relax_disp.select_model user function frontend.  This is the Trott and Palmer 2002 R1rho analytic model for 2-site exchange.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'TP02' model to relaxation dispersion chapter of the relax user manual.  This is the Trott and Palmer 2002 R1rho analytic model for 2-site exchange.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'TP02' R1rho' calculating function to the relax library.  This is the Trott and Palmer 2002 R1rho analytic model for 2-site exchange.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).  The Matlab code from Skrynnikov and Tollinger has not been converted to Python code yet.  This is to allow the Matlab->Python conversion to be followed.
        * Fix for the 'M61 skew' dispersion model indexing in the user manual.
        * Added the 'NS 2-site expanded' model to the CPMG dispersion sample script.
        * Added the 'NS 2-site expanded' and 'TP02' models to the script in the manual.  This is in the script section of the dispersion chapter of the user manual.
        * Converted the lib.dispersion.tp02 module from Matlab code to Python.  The code has also been made fail-safe and repetitive calculations have been shifted outside of the loop to speed things up.
        * Fixes for the TP02 model section of the dispersion chapter of the manual.
        * Created the 'TP02' model target function.  This is the Trott and Palmer 2002 R1rho analytic model for 2-site exchange.  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'TP02' model to the relax_disp.select_model user function back end.  This is the Trott and Palmer 2002 R1rho analytic model for 2-site exchange.  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * The spectrometer frequency information is now checked for the TP02 model.
        * Started to create a script to create synthetic data for the TP02 dispersion model.  This still needs a lot of work.
        * Added the tp02 module to the lib.dispersion package __all__ list.
        * Created the synthetic data for the TP02 dispersion model.  The Sparky peak lists have been created and added to the repository.
        * Modified the synthetic data for the TP02 dispersion model.  The data is more closely mimics that from the paper, and should now be in the slow exchange regime.
        * Updated the M61 R1rho model conditions in the table in the user manual.
        * Updated the TP02 R1rho model conditions in the table in the manual.  This cannot be fast exchange.
        * Started to create the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.
        * A fix for older numpy versions, as the numpy.add() function argument 'out' is relatively new.
        * Added the new 'TSMFK01' model to the specific_analyses\relax_disp\variables.py module.  This is the Tollinger/Kay model for the 2-site very-slow exchange model for CPMG-type experiments, which cover the range of microsecond to second time scale.  Paper by M. Tollinger, N.R. Skrynnikov, F.A.A. Mulder, J.D.F. Kay and L.E. Kay (2001).  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * lib/dispersion/lm63.py is copied to tsmfk01.py as part of the implementation of the TSMFK01 model equation.  Progress sr #3071: https://gna.org/support/?3071 -Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the TSMFK01 model to the user_functions/relax_disp.py select_model user function frontend.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Created the TSMFK01 model target function for 2-site very-slow exchange model, range of microsecond to second time scale.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the TSMFK01 model equations to the relax library lib/dispersion/tsmfk01.py.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * The chemical shift of each spin is now taken into account for the synthetic data for the TP02 dispersion model.  The data now properly reflects the spin lock offset.
        * Updated all of the dispersion system tests for the spectrum.read_intensities user function changes.  The arguments heteronuc and proton have been replaced with 'dim'.
        * Improved the error message for when peak intensity data cannot be found in a dispersion analysis.  This is to better aid the user to track down what they did wrong.
        * More error message improvements for when peak intensity data cannot be found in a dispersion analysis.
        * Created the relax script for the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.
        * Changed the synthetic data file names for the TP02 dispersion model.
        * Updated the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test script for the new file names.
        * Added a new user function to the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.  This is the chemical_shift.read user function which currently does not exist.  Chemical shifts are needed to interpret off-resonance R1rho data.
        * Copyright of Sebastien Morin and Edward d'Auvergne re-inserted, since tsmfk01 is an alteration of lm63.py and m61.py in same directory.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for converting dw from ppm to rad/s.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added support for the TSMFK01 model to the relax_disp.select_model user function back end.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for the reading of chemical shifts in the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.
        * Added the Trott and Palmer, 2002 bibtex reference for the user manual.
        * Added preliminary support for chemical shifts to the dispersion target functions.
        * Modified the GUI behaviour for a dispersion analysis when the C modules are not compiled.  Previously a user was blocked from performing any dispersion analysis in the GUI is the modules were not compiled.  Now instead, although an error is still thrown, the analysis will be initialised.
        * A new check blocking exponential curve fitting in the dispersion analysis when the C modules are not compiled.
        * Changed how chemical shifts are handled in the dispersion target function class.  The chemical shifts in ppm are accepted and they are converted to rad/s inside the __init__() method.  A structure for rotating frame tilt angles is now also accepted.
        * Added a relax_disp.spin_lock_offset user function call to Relax_disp.test_r1rho_off_res_tp02.  This is the Relax_disp.test_r1rho_off_res_tp02 system test and the user function does not exist yet.
        * Implemented the relax_disp.spin_lock_offset user function.  This includes both the front end and the back end specific_analyses.relax_disp.disp_data.spin_lock_offset() function.
        * The offset is now set for all spectra in the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.  Previously only the reference was set.
        * Fixed a typo in the dispersion chapter of the user manual.  This was identified by Troels Linnet at http://thread.gmane.org/gmane.science.nmr.relax.devel/4410.
        * Fix for the relax_disp.spin_lock_offset user function.  The cdp.dispersion_points structure was being updated when it should not be touched - a remnant of the relax_disp.spin_lock_field backend which this code was copied from.
        * Added some more arguments to the dispersion target function class for off-resonance R1rho models.  This is the structure for the spin-lock offsets and the tilt angles for each spin.
        * Fix for the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.  The correct spectrum ID is now used for the relax_disp.spin_lock_offset user function calls in the script.
        * The dispersion specific optimisation code is now assembling chemical shift related data.  The specific_analyses.relax_disp.disp_data.return_offset_data() function has been written to return structures for the chemical shifts, offsets, and tilt angles.  These are then used by the optimisation functions by passing them into the target function code.
        * The TP02 model code is now in a semi functional state.  The lib.dispersion code has been fixed to properly handle the data it receives and the target function code has been updated to pass in the correct data.
        * The TP02 model R1rho off-resonance test data creation script now creates files of the R1 relaxation data.  These files are needed for the system tests, as R1 data needs to be read.
        * The dispersion target function class now handles R1 relaxation data.  This data is essential for the off-resonance R1rho models.
        * The Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test script now reads the R1 relaxation data.  This data is essential for the model optimisation.
        * The dispersion specific code is now assembling the R1 data and passing it to the target function.  The new specific_analyses.relax_disp.disp_data.return_r1_data() function creates a data structure holding all the R1 data.  This is used in the off-resonance R1rho experiments.
        * Added checks to the specific_analyses.relax_disp.disp_data.return_r1_data() function.  This is to help indicate to the user when data is missing.
        * Fix for the Relax_disp.test_bug_20889_multi_col_peak_list GUI test.  The spectrum.read_intensities user function no longer has 'heteronuc' and 'proton' arguments.
        * Fix to allow R1 data to be randomised for Monte Carlo simulations for off-resonance R1rho data.  This is a temporary kludge for the dispersion analysis and needs to be replaced by a cleaner solution via the base_data_loop() method.
        * Fix for the synthetic data for the TP02 dispersion model.  The nitrogen chemical shift was not converted from ppm to rad/s before being used to calculate the offsets.
        * Fixes for the parameter checks in the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.  The parameter values had not been updated from when the test was copied from one of the other tests.
        * Turned off clustering in the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.  This speeds the test up by more than half.
        * Fix for the TP02 dispersion model.  The rotating frame tilt angle for this model is calculated from the population averaged chemical shift and not the equal weighted average.
        * Attempt at fixing bug #21080 (https://gna.org/bugs/?21080).  This was reported by Troels Linnet.  The problem is a standard GUI problem.  The text from a wxPython GUI is a Unicode string.  But relax requires standard strings.  Therefore the gui.string_conv.gui_to_str() function needs to be used on the return value of the GUI element GetValue() method, but this call was forgotten.
        * Fix for the synthetic data for the TP02 dispersion model.  The chemical shift is being set to that of state A, the major species, rather than the non-weighted chemical shift average.  This could also have been set to the population weighted average.
        * The TP02 dispersion model now assumes the chemical shift is that of the major population A.  Previously the linear chemical shift average was assumed.
        * Increased the grid search size in the Relax_disp.test_r1rho_off_res_fixed_time_tp02 system test.
        * The self.field_pre_run_dir GUI element is now deactivated with the execution lock.
        * Many fixes and improvements for all of the R1rho dispersion models in the user manual.  The equations are now correct and the parameter table updated with new parameters and equations.
        * Removed the unused theta and R1 arguments for the lib.dispersion.m61.r1rho_M61() function.  These off-resonance parameters are not used in the on-resonance model.
        * Updated the r1rho_on_res_m61 dispersion on-resonance data for off-resonance models.  The chemical shifts are now the same for all spins, to force perfect on-resonance, and the two spins are now different residues.
        * Added an R1 data file to r1rho_on_res_m61, by copying from the r1rho_off_res_tp02 test suite data.
        * Updated the Relax_disp.test_r1rho_on_res_fixed_time_dpl94 system test for off-resonance data.  The offsets, R1 data, and chemical shifts are now setup or read by the script.
        * Fixes for the DPL94 model to make it truly off-resonance.  The tilt angles and R1 data are now used by the target function.
        * Fixes for the r1rho_on_res_m61.py system test script.  The spins are now different residues.  This fixes two system tests.
        * Renamed all of the current numeric dispersion models in relax to be specific to CPMG-type data.  This is in preparation for adding R1rho numeric models.  It was proposed at http://thread.gmane.org/gmane.science.nmr.relax.devel/4461.
        * Added the 'NS R1rho 2-site' model to the specific_analyses.relax_disp.variables module.  This is the numerical model for the 2-site Bloch-McConnell equations for R1rho data.  This commit follows step 1 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS R1rho 2-site' model to the relax_disp.select_model user function frontend.  This is the numerical model for the 2-site Bloch-McConnell equations for R1rho data.  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS R1rho 2-site' R1rho calculating function to the relax library.  This is the numerical model for the 2-site Bloch-McConnell equations for R1rho data.  This code originates from the Skrynikov & Tollinger code (the sim_all.tar file https://gna.org/support/download.php?file_id=18404 attached to https://gna.org/task/?7712#comment5).  Specifically the funNumrho.m file.  This commit follows step 3 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Fix for the function name in the lib.dispersion.ns_r1rho_2site module and removed misplaced copyrights.
        * Created the 'NS R1rho 2-site' model target function.  This is the numerical model for the 2-site Bloch-McConnell equations for R1rho data.  The code originates from the funNumrho.m file from the Skrynikov & Tollinger code (the sim_all.tar file https://gna.org/support/download.php?file_id=18404 attached to https://gna.org/task/?7712#comment5).  This commit follows step 4 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added support for the 'NS R1rho 2-site' model to the relax_disp.select_model user function back end.  This is the numerical model for the 2-site Bloch-McConnell equations for R1rho data.  The code originates from the funNumrho.m file from the Skrynikov & Tollinger code (the sim_all.tar file https://gna.org/support/download.php?file_id=18404 attached to https://gna.org/task/?7712#comment5).  This commit follows step 6 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Added the 'NS R1rho 2-site' model to the relax user manual.  This is the numerical model for the 2-site Bloch-McConnell equations for R1rho data.  The code originates from the funNumrho.m file from the Skrynikov & Tollinger code (the sim_all.tar file https://gna.org/support/download.php?file_id=18404 attached to https://gna.org/task/?7712#comment5).  This commit follows step 2 of the relaxation dispersion model addition tutorial (http://thread.gmane.org/gmane.science.nmr.relax.devel/3907).
        * Rearrangement of the model sections in the dispersion chapter of the user manual.  These are now better separated into different categories.
        * Created a save file for the r1rho_off_res_tp02 dispersion data optimised to the R2eff model.  This will be used for faster system tests.
        * Created the Relax_disp.test_r1rho_ns_r1rho_2site_to_tp02 system test for the new 'NS R1rho 2-site' model.  This tests the 'NS R1rho 2-site' model against the R1rho off-resonance test data from the 'TP02' model.
        * A number of fixes for the 'NS R1rho 2-site' dispersion model.  The model should now be fully functional.  The chemical shift and R1 related data are now assembled for this model, and the data correctly passed from the target function to the lib.dispersion module.
        * The Relax_disp.test_r1rho_ns_r1rho_2site_to_tp02 system test now passes.  The optimised values have been hard-coded into the system test.  They do not match the TP02 results, but are close.
        * Renamed many of the Relax_disp system tests to bring some order to the naming.
        * Alphabetical ordering of all of the Relax_disp system tests.
        * Created a system test to catch bug #21081 (https://gna.org/bugs/?21081).  This uses a truncated version of Troel Linnet's save state attached to the bug report (the data pipes not used in the model selection have been manually deleted as well as all by the first 3 spins in the remaining 2 data pipes).
        * Fix for bug #21081 (https://gna.org/bugs/?21081) - the failure of a dispersion cluster analysis.  The problem was that the specific_analyses.relax_disp.disp_data.loop_cluster() generator method was not taking the spin.select flag into account.  Now all deselected spins are excluded from the spin clusters and the free spins.
        * Better support for off-resonance R1rho data in the dispersion GUI.  A new row of buttons has been added to the dispersion GUI, just above the Peak list GUI element.  The first button is for the spin.isotope user function and replaces the old GUI element.  Two new buttons for loading R1 data and chemical shifts have also been added, as required for off-resonance R1rho data.
        * Changed the chemical shift icon to that of the chemical shift in ppm units - the delta symbol.
        * The chemical shift icon now has a transparent background.
        * Small changes to the tooltips of the R1 and chemical shift buttons.
        * Used far more Unicode for superscript, subscript and Greek letters for the model parameters.  This is for the model list elements in the dispersion GUI tab.
        * Added the 'TP02' and 'NS R1rho 2-site' models to the R1rho model list in the dispersion GUI.  These models were missing from the list.
        * Fix for the 'NS R1rho 2-site' model description in the relax_disp.select_model user function.
        * The relax_disp.select_model GUI wizard combo element now uses Unicode for the dispersion parameters.  This is for all the models.  The 'LM63 3-site' model parameter list has also been fixed to match the current set.
        * The CPMGFit input and output file names for relaxation dispersion are now MS Windows compatible.  This is needed to allow the files in the test suite to exist on Windows systems, as the '#:@'symbols cause problems.  The same logic as used for the relax_disp.plot_disp_curves is used to replace these characters with an underscore.
        * CPMGFit file name fixes for MS Windows.  The '#:@' characters have all been replaced by underscores.
        * Fix for the Relax_disp.test_hansen_cpmgfit_input system test.  The '#:@' characters are no longer used in the file names.
        * Updates to the Relax_disp system tests for the lower precision of MS Windows.  These fixes allow the tests to pass on MS Windows.
        * Renamed ka parameter to kA, to be consistent with naming conventions.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for r20 should be called r20a.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for unpacking the parameters correctly.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the k_AB and k_BA parameters to the table of all dispersion parameters.
        * Proper ordering of all the dispersion models.  See the thread at http://thread.gmane.org/gmane.science.nmr.relax.devel/4498 for details.
        * Added the 'NS R1rho 2-site' model to the dispersion auto-analysis.
        * Added the 'TP02' model to the dispersion auto-analysis.
        * The tutorial for adding dispersion models in the user manual has been simplified.  Most of the text from the dispersion model addition tutorial in the dispersion chapter of the manual has been removed.  Instead a link to the tutorial on the wiki is given as this is a much better place for such information (http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax).
        * Moved the ordering of the model TSMF.  Ordering conventions mentioned in this post http://article.gmane.org/gmane.science.nmr.relax.devel/4500.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the relax_disp.spin_lock_offset user function to the peak intensity wizard of the GUI.  This is only for R1rho-type data and allows off-resonance data to be analysed in the GUI.
        * Data provided for the implementation of the slow-exchange analytic model of the Tollinger/Kay (2001).  This model were used for fitting in the paper http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1458987.
        * Created the Relax_disp.test_tp02_data_to_tp02 GUI test.  This is based on the system test of the same name.  This GUI test checks that an off-resonance R1rho analysis is functional in the GUI.
        * Python 3 space fixes for the lib.software.grace.script_grace2images() function.  As the script is encoded by strings, the 2to3 program cannot fix this script.  Therefore the changes were made by hand.
        * Unicode strings in the dispersion GUI elements is now set up with the compat.u() function.
        * Fix for the y-axis in the per spin dispersion curve plots.  This fix follows from the thread http://thread.gmane.org/gmane.science.nmr.relax.devel/4512.  The test for CPMG-type data was incorrect and should use the CPMG_EXP variable.
        * Added setup function for the system test of KTeilum_FMPoulsen_MAkke_2006 data.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fixed a spelling mistake in a number of file names.  This is for the test suite data located at test_suite/shared_data/dispersion/KTeilum_FMPoulsen_MAkke_2006.
        * Fixes for the units in the dispersion parameter table in the user manual.  The units for dw are rad.s^-1 when used in the equations, but it is stored internally as ppm.
        * Truncated the dataset to only one residue L61.  The truncated dataset will be expanded later.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Modified the script file for saving of a truncated base_pipe state file.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added script files for generating a saved state file with R2eff values.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the first system test for model CR72 for the kteilum_fmpoulsen_makke_cpmg_data.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix trailing spaces.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix epydoc HTML markup code.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added some MQ dispersion data taken from the GUARDD program.
        * Modified the Relax_disp.test_dpl94_data_to_dpl94 system test for a relax_disp.exp_type change.  This is so that the relax_disp.exp_type user function associates the experiment types with a spectrum ID.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530.
        * Clean up and expansion of the dispersion experiment type variables.
        * Another change to the dispersion experiment type variables.
        * Fixes for the changes to the dispersion experiment type variables throughout the dispersion code.
        * Redesigned the relax_disp.exp_type user function to be associated with spectrum IDs.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.  The user function backend has been moved from specific_analyses.relax_disp.api to specific_analyses.relax_disp.disp_data.  A few temporary code additions have been made to keep the user function functional with the current dispersion code.
        * Fixes for the relaxation dispersion system tests for the relax_disp.exp_type changes.
        * The relaxation dispersion system tests requiring the compiled C modules are now skipped when not compiled.
        * Created the specific_analyses.relax_disp.disp_data.loop_exp*() functions.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.  The methods added are loop_exp(), loop_exp_frq(), loop_exp_frq_point() and loop_exp_frq_point_time().
        * Removed the relax_disp.exp_type user function page from the new analysis wizard.
        * Modified the dispersion GUI analysis to handle the relax_disp.exp_type user function changes.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.  The experiment type GUI element has been removed, the CPMG and R1rho model lists merged into one, and much code for the experiment type removed.  The peak analysis wizard will need to be heavily modified for the changes.
        * Added the relax_disp.exp_type user function to the peak intensity loading wizard.
        * Added the experiment type to the spectrum list GUI element.  This is only activated if the exp_type_flag argument is True.
        * The CPMG frequency and spin-lock field strength columns are merged in the spectrum list GUI element.  The column is now for the dispersion point data, and allows different experiment types to be mixed.
        * The spectra list GUI element in the dispersion auto-analysis now shows all columns.
        * Removed the temporary FIXMEs from the relax_disp.exp_type user function backend.  This is needed to enable the mixed experiment type code to be developed further, but means that the relax_disp branch will be broken for a while.
        * The specific_analyses.relax_disp.disp_data.loop_point() function now requires the exp_type argument.  The exp_type can no longer be determined within the loop_point() function.  Therefore it must be specified using a function argument.  The rest of the module has been updated for this change.
        * Updated specific_analyses.relax_disp.parameters.param_num() for the relax_disp.exp_type changes.
        * Fix for the Relax_disp.test_dpl94_data_to_dpl94 system test.  The experiment type is now set for the reference spectrum.
        * Created the new specific_analyses.relax_disp.checks module.  This contains many check_*() functions for raising RelaxErrors to tell the user when something is wrong.  This will be used to simplify, make more consistent, and fix cdp.exp_type errors in the dispersion code.
        * Added a number of auxiliary functions to specific_analyses.relax_disp.disp_data.  These are get_curve_type(), has_exponential_exp_type(), and has_fixed_time_exp_type() and will be used to simplify the dispersion code.
        * Fixes for the specific_analyses.relax_disp.api module for the relax_disp.exp_type change.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.  The loop_exp*() functions are now being used throughout the module.  The specific_analyses.relax_disp.checks.check_*() functions are also used to simplify the code and fix changes to cdp.exp_type.  And some auxiliary functions from specific_analyses.relax_disp.disp_data are being used as well.
        * Added some functions to specific_analyses.relax_disp.disp_data for checking if certain experiments exist.  These are the has_cpmg_exp_type() and has_r1rho_exp_type() functions.
        * The dispersion auto-analysis no longer references cdp.exp_type.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.
        * Fix for the new loop_exp_frq() dispersion function.
        * A few fixes for the relax_disp.exp_type user function changes.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.
        * Fixes for the specific_analyses.relax_disp.disp_data.find_intensity_keys() function.  This is for the cdp.exp_type changes.
        * Fixes for the relax_disp.plot_disp_curves user function backend for the cdp.exp_type changes.
        * A number of fixes for the relax_disp.exp_type user function changes.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.
        * Updated the Hansen CPMG data relax save files for the cdp.exp_type changes.
        * Fix for the Relax_disp.test_hansen_cpmgfit_input system test for a new set of errors.  The Hansen R2eff values have been recalculated and the errors are now slightly different.
        * More fixes due to the cdp.exp_type change.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.
        * Updated the r1rho_off_res_tp02 dispersion system test data for the cdp.exp_type changes.
        * Some more fixes for the cdp.exp_type now being dependent on the spectrum ID.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.
        * Changes so that the target function will handle multiple experiment types.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.  The data structures from return_r2eff_arrays() now have an additional dimension.  The new first dimension is that of the experiment type.  This affects the values, errors, and missing data structures.  This dimension is stripped in the dispersion target function class for the single experiment type models, but will be preserved for the combined models to be added in the future.
        * The spectrum list GUI element is now more robust to missing data.  The cdp.spectrum_ids data structure no longer needs to exist.
        * The peak intensity wizard requires more than 10 pages.  The hardcoded limit of a maximum of 10 wizard pages has been increased to 15.  Due to the non-linearity for the wizard pages, not all are seen, but many pages are required.
        * The spectrum list GUI element can now handle the cdp.exp_type data structure not existing.
        * Fixes for all of the specific_analyses.relax_disp.disp_data.has_*_exp_type() functions.  They now operate when no experiment types have been specified.
        * Redesigned the peak intensity loading GUI wizard for handling multiple experiment types.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.  The logic for the page ordering needed to be changed to be more dynamic.  The CPMG and R1rho pages need to be shown only if the corresponding experiment type exists in the current data pipe.  Hence the has_cpmg_exp_type() and has_r1rho_exp_type() dispersion functions are now used by the new methods wizard_page_after_relax_time() and wizard_page_after_cpmg_frq().  A number of now useless flags have also been removed.
        * Added some sanity checks to the dispersion target function class.  R1rho models cannot be used with CPMG-type experiments, and CPMG models cannot be used with R1rho-type experiments.
        * Fixes for all of the GUI dispersion tests for the changes to cdp.exp_type.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.
        * Large speed up of the Relax_disp.test_tp02_data_to_tp02 GUI test.  By minimising the number of times the peak intensity wizard pages are regenerated, the test time decreased on one system from ~32s to ~12s.
        * Simplified the code of the Relax_disp.test_hansen_trunc_data GUI test.
        * The GUI now warns if the user choses inappropriate models.  When clicking on 'Execute', an error message appears if R1rho models are selected for CPMG data and vice versa.  This is simply for more intuitive user feedback.
        * Fix for the relax_disp.exp_type pop up menu entry in the spectrum list GUI element.  This was calling relax_fit.exp_type rather than relax_disp.exp_type.
        * Fix for the relax_disp.cpmg_frq pop up menu entry in the spectrum list GUI element.  The method associated with the menu entry action_relax_disp_cpmg_frq() was buggy.
        * Fix for the relax_disp.spin_lock_field pop up menu entry in the spectrum list GUI element.  Another action method bug - the same as in the last commit.
        * Added two functions for determining if a spectrum ID corresponds to a CPMG or R1rho experiment.  These are functions in specific_analyses.relax_disp.disp_data and they are called is_cpmg_exp_type() and is_r1rho_exp_type().
        * Big redesign of the spectrum list GUI element for the dispersion analysis.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/4530, the thread about supporting multiple data types such as SQ+MQ data simultaneously.  The popup menu must be generated on the fly, as the CPMG frequency and spin-lock field strength menu entries should only be shown for the appropriate experiment type.  Therefore the new generate_popup_menu() method has been added to the gui.components.base_list GUI element.  The flags sent into the spectrum list GUI element have also been completely changed to now indicate the analysis type directly.
        * Expanded the Relax_disp.test_hansen_trunc_data GUI test to check the spectrum list GUI element.  The popup menu is now tested with the Fake_right_click() trick.  And the actions of a number of the menu items, the action*() methods, are tested to see if the user functions are correctly called.
        * Modified many of the spectrum list GUI element action_*() methods for the GUI tests.  These now take the 'item' keyword argument which overrides the ListCtrl.GetFirstSelected() call.  This ListCtrl call cannot be reliably simulated on all operating systems, so the item keyword argument can be used to explicitly select list items.
        * Fix for setting the relaxation time in the spectrum list GUI element for the dispersion analysis.  The popup menu item was calling the relax_fit.relax_time user function and not relax_disp.relax_time.
        * Fix for the action_relax_disp_cpmg_frq() method of the spectrum list GUI element.  The relax_disp.cpmg_frq user function was being incorrectly called.  This was identified via the Relax_disp.test_hansen_trunc_data system test.
        * Modified the Relax_disp.test_tp02_data_to_tp02 GUI test to check the spectrum list GUI element.  The popup menu is now tested in the same way as in the Relax_disp.test_hansen_trunc_data GUI test.
        * Modified the spectrum list GUI element action_relax_disp_spin_lock_field() method for the GUI tests.  This now accepts the optional 'item' keyword argument like the other action_*() methods.
        * Bug fix for the spectrum list GUI element popup menu relax_disp.spin_lock_field entry.  This was calling the relax_disp.spin_lock_field user function incorrectly.  The bug was identified by the Relax_disp.test_tp02_data_to_tp02 system test.
        * Fix for the Mf.test_auto_analysis GUI test due to the spectrum list GUI element changes.  The Fake_right_click() class now needs a GetPosition() method.
        * Moved the experiment type setting into per spectra settings.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fixed typo.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the truncated test data for system test: relax -s Relax_disp.test_kteilum_fmpoulsen_makke_cpmg_data_to_cr72.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Created a relax save file with just R2eff values for the r1rho_on_res_m61 dispersion system tests data.
        * Created 3 new dispersion system tests.  These are for checking a new function that doesn't exist yet.  The get_curve_type() function will be used to determine if the experiment corresponding to the given ID consists of exponential curves or of fixed time data.
        * Fixed values for system test: relax -s Relax_disp.test_kteilum_fmpoulsen_makke_cpmg_data_to_cr72.  The test now passes.  The values are compared to a relax run with 500 Monte Carlo simulations.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added "CR72 full" test suite for kteilum_fmpoulsen_makke_cpmg_data.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added file which setup a truncated spin system.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Changed the initialization script to use the truncated spin system.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Changed the saved states to the truncated spin system.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for the residue index in the test suite when using the truncated spin system.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * The R2eff result save file for the r1rho_on_res_m61 dispersion data now contains the full data set.  The previous file did not contain the full exponential curves.
        * The get_curve_type() function now works with the spectrum ID.  This specific_analyses.relax_disp.disp_data.get_curve_type() function already existed but it operated on all the loaded data.  Now it can handle a single spectrum ID.  The count_relax_times() function has been added to aid get_curve_type().
        * The get_curve_type() function is now imported into the dispersion system test module.
        * Modified the Relax_disp.test_dpl94_data_to_dpl94 system test.  This is in preparation for another relax_disp.exp_type change - the fixed and exponential parts will be dropped as this can be determined automatically by relax.
        * Changed the relax_disp.exp_type user function front end.  The supported types will now be 'CPMG' and 'R1rho', as the fixed time verses full exponential curve can be automatically determined by relax from what the user inputs.
        * Started a system test for model TSMFK01.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Modified the script for the full analysis of all models of CPMG type.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Simplified the dispersion experiment type classes.  The supported types will now be 'CPMG' and 'R1rho', as the fixed time verses full exponential curve can be automatically determined by relax from what the user inputs.  The EXP_TYPE_* dispersion variables have all changed and many have now been lost.  To support the changes, the new specific_analyses.relax_disp.disp_data.loop_spectrum_ids() function has been created.  This is a loop over all spectrum IDs whereby the experiment type, magnetic field strength, dispersion point, or relaxation time can be specified to isolate ID subsets.  Many of the specific_analyses.relax_disp.checks.check_*() has also been modified as their logic no longer works.  The auxiliary get_times() function has been added to create a per-experiment dictionary of relaxation times so that the checks can be independent of the other dispersion modules.
        * Updated much of the dispersion test data.  The experiment type has been changed in all the scripts and the relax save files updated.
        * Fixed expydoc formatting.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Created some more specific_analyses.relax_disp.checks.check_*() functions.  This is for better checking of the dispersion data.  The check_spectra_id_setup() is useful for checking that all of the spectrum information is set up.
        * The checks prior to minimisation of the dispersion models is now more comprehensive.
        * Bug fixes for the specific_analyses.relax_disp.checks.get_times() function.  The function is now more tolerant if certain data has now been set up yet.
        * Fixes for some of the R1rho dispersion system test scripts.  The relaxation time must be set for the reference spectrum.
        * Fixes for the Relax_disp.test_exp_fit system test - the spectrometer frequency is now set.  This information is now compulsory.
        * Converted references of ka and kA to k_AB.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Updated the CPMG dispersion analysis sample script for the relax_disp.exp_type user function changes.
        * Updated the user manual for the relax_disp.exp_type user function changes.  The script in the prompt/script UI section of the dispersion chapter needed to be updated.
        * Referencing fixes for the dispersion chapter of the user manual.
        * Updated the scripts and save files for the KTeilum_FMPoulsen_MAkke_2006 dispersion data.  This is for the recent relax_disp.exp_type user function changes and this allows the tests to pass.  Information on how to run the scripts and tee the output to logs has been added, and the logs added to the repository.
        * Added k_AB to parameters.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * More fixes for the relax_disp.exp_type user function changes.
        * The relaxation dispersion GUI elements now use the lib.text.gui module for Unicode strings.
        * Some Unicode text fixes in the dispersion GUI analysis for older MS Windows versions.
        * Updated the Grace string for the k_AB parameter - it was being shown as kA.
        * Fix for the model list in the GUI - the TSMFK01 model entry was broken.
        * Increased the size of the dispersion model list GUI window so that all models fit without scrolling.
        * Refinement of the dispersion model list in the GUI.  Descriptions have been added and the fixed window size adjusted to the best fit.
        * Modified system test after inclusion of 1M GuHCl dataset.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Moved files into folder which is specific for the experiment.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Changed scripts after moving data.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Re-run of data after movement of scripts.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added dataset experiment in 1.01 M GuHCl (guanidine hydrochloride).  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added to the README file for the 1.01 M GuHCL experiment.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Modified doc string for the script analysing all models for residue L61.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the output from relax after analysis of all models.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Removed the size variable from the dispersion model list GUI window as it is no longer used.
        * Added the k_AB and k_BA conversion equations to the dispersion parameter table in the user manual.
        * Changed reference to Tollinger et al. instead of Tollinger/Kay.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fixes for the dispersion GUI tests for the changes to the model list GUI element.
        * Added the button for the interatom.define user function in preparation for the MQ dispersion data.  This is in the dispersion tab of the GUI.
        * The return_cpmg_frqs() and return_spin_lock_nu1() functions now return numpy arrays.  These are functions from specific_analyses.relax_disp.disp_data.
        * Speed ups for the optimisation of all of the R1rho dispersion models.  The spin-lock field strength data structure is now converted from Hz to rad.s^-1 in the dispersion target function initialisation.  Previously the conversion was happening multiple times per target function call.  This has a noticeable effect on the test suite timings.
        * Some small speed ups for the TP02 R1rho dispersion model optimisation.  Some unneeded calculations and aliases were removed.
        * Added the write-out of 'dw' and 'k_AB' for model TSMFK01, when performing auto-analysis.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added to calculate the tau_cpmg times when model is TSMFK01.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Optimized the target function for model TSMFK.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the conversion to k_AB from kex and pA.  k_AB = kex * (1.0 - pA).  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Some more speed ups for the R1rho dispersion models.  For many models, the square of the spin-lock field strength is a part of the equations.  Therefore this is now pre-calculated when the target function is initialised.
        * Added the relaxation dispersion documentation to all of the value user function documentation.
        * Fix for the CPMG dispersion sample script - the numeric solution model name was not correct.
        * Fix for the dispersion model list in the GUI - the R1rho models were mixed up.
        * Added a sample script for an off-resonance R1rho dispersion analysis.
        * Created the empty specific_analyses.relax_disp.optimisation module.  This will contain functions and other objects relating to the optimisation of the dispersion models.
        * Fixed bug, where kex to k_AB where not possible if the model does not contain parameter 'pA'.  The conversion is now skipped.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added the conversion to k_BA from kex and pA.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added system test for testing conversion to k_BA from kex and pA.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for passing system test on Windows with Python 32.  Precision lowered by 2 decimals.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added system tests for conversion of kex to k_AB/k_BA for models where kex and pA is present.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Modified headers for scripts producing analysis for data which is full or truncated.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Created the dispersion default_value_doc object.  This table is needed for the value.set user function.
        * Huge speed win for the relaxation dispersion analysis - optimisation now uses the multi-processor.  The relaxation dispersion optimisation has been parallelised at the level of the spin clustering.  It uses Gary Thompson's multi-processor framework.  This allows the code to run on multi-core, multi-processor systems, clusters, grids, and anywhere the OpenMPI protocol is available.  Because the parallelisation is at the cluster level there are some situations, whereby instead of optimisation being faster when running on multiple slaves, the optimisation will be slower.  This is the case when all spins being studied in clustered into a small number of clusters.  It is also likely to be slower for the minimise user function when no clustering is defined, due to the overhead costs of data transfer (but for the numeric models, in this case there will be a clear win).  The two situations where there will be a huge performance win is the grid_search user function when no clustering is defined and the Monte Carlo simulations for error analysis.
        * Decreased the number of grid increments in the dispersion sample scripts from 21 to 11.  This is a much easier optimisation problem than the other analyses in relax, so 21 increments is an overkill.  It also takes far too long for some of the models due to the high number of parameters.
        * Removed a tonne of unused imports from the modules of the specific_analyses.relax_disp package.
        * Deselected most of the default dispersion models from the dispersion GUI model list.  Now only one analytic and numeric model is selected per experiment type.  This is to hint to the user that maybe they shouldn't just use all models.
        * Added desc. item for model TSMFK01.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added TSMFK01 to model overview table.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added subsection with TSMFK01 model.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for adding TSMFK01 to sample scripts.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Updated the relax_disp_trunc.py script for Flemming Hansen's CMPG test data.
        * Started to create the relax_disp.catia_input user function.  The frontend has been written and a stub of a function for the backend.  The new specific_analyses.relax_disp.catia module has been created for this.
        * Created the Relax_disp.test_hansen_catia_input system test.  This is to check the output of the relax_disp.catia_input user function.
        * The relax_disp.catia_input user function now creates the main CATIA input file and all R2eff data files.
        * Created a script for converting Flemming Hansen's data into CATIA input files.  This is for checking the relax_disp.catia_input and relax_disp.catia_execute user functions.
        * Fix for the CATIA main execution file created by relax_disp.catia_input.  The CATIA DataDirectory needs a '/' at the end.
        * Improvements to the relax_disp.catia_input user function.  On top of general improvements, the global parameter and parameter set files are now created.
        * More improvements for the relax_disp.catia_input user function.  The output directory for CATIA results is now an argument for the main backend function.  This directory is now also created, as required by CATIA.
        * Implemented the relax_disp.catia_execute user function.  This is modelled on the palmer.execute user function.
        * The relax_disp.catia_input user function now has a GUI icon associated with it.
        * Added the CATIA input files generated by relax for Flemming Hansen's truncated CPMG data set.
        * Rearranged the numeric CPMG models in the dispersion model list in the GUI.
        * The main CATIA input file requires the chemical shifts and R1 values to be fixed, even when missing.  This is for the relax_disp.catia_input user function.
        * Added Tollinger reference.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Added Tollinger model TSMFK01 to sample scripts.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fixed several typo errors of "Is it selected"->"It is selected".  A copy-paste error which has spread.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Spacing fixes for the Tollinger01 Bibtex entry for the author initials.
        * Removed some strange characters from the Tollinger01 Bibtex abstract.
        * Fix for some inline references in the dispersion chapter of the user manual.
        * Enabled the parallelisation of Monte Carlo simulations for the relaxation dispersion analysis.
        * Created a set of scripts for testing out the multi-processor abilities of the dispersion analysis.
        * Added Remco Sprangers' truncated ClpP data to test_suite/shared_data/dispersion/Spranger_ClpP.  This is the data attached to https://gna.org/task/?7712#comment6, and it will be used for testing the implementation of the 'MQ NS 2-site' model, when added to relax.
        * Concatenated the peak intensity files.
        * Created a relax script for analysing Remco Sprangers' ClpP data with the 'MQ NS 2-site' model.  This currently does not work, as the model is absent.
        * Modified the dispersion auto-analysis to check if peak intensity errors have been pre-calculated.  This allows the user to perform custom analyses and the auto-analysis will then not overwrite these values.
        * Bug fixes for the averaging of peak intensity errors in the dispersion analysis.  This is in the specific_analysis.relax_disp.disp_data.average_intensity() function.
        * Fix for the docstring formula in lib.dispersion.two_point.calc_two_point_r2eff_err().
        * Updated the relax script for analysing Remco Sprangers' ClpP data with the 'MQ NS 2-site' model.  The error analysis has been removed as it is identical to what the auto-analysis does.
        * Renamed the directory of Remco Sprangers' CPMG dispersion data to correctly spell his name.
        * Updated the script for Remco Sprangers' MQ CPMG data.
        * Created the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test.  This checks the 'MQ NS 2-site' model against Remco Sprangers' MQ CPMG data using the auto-analysis.
        * Fixes for the checks of the new Relax_disp.test_sprangers_cpmg_data_auto_analysis system test.  The 'MQ NS 2-site' model checks were still set up to those of the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.
        * Added the 'MQ NQ CPMG 2-site' model to the dispersion variables.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list The new dispersion variable MODEL_MQ_NS_CPMG_2SITE has been added.  As this is a new data type, multi-quantum CPMG, the new MODEL_LIST_MQ_CPMG and MODEL_LIST_MQ_CPMG_FULL lists have been created.
        * Rearranged the documentation for the relax_disp.select_model user function to simplify the text.
        * Created the lib.text.gui.dwH Unicode string for use with the 'MQ NS 2-site' dispersion model.
        * Added the 'MQ NS CPMG 2-site' model to the relax_disp.select_model user function frontend.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_front_end Two new sections were added to the user function docstring for the MQ CPMG and MQ R1rho experiment types.
        * Added support for the 'MQ NS CPMG 2-site' model to the relax_disp.select_model user function back end.  This is the numeric solution for 2-site exchange for multi-quantum CPMG-type data.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_back_end.
        * Added support for the new 'dwH' dispersion parameter.  This is needed for the 'MQ NS CPMG 2-site' model support.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_support_for_the_parameters.
        * Improved the RelaxError from the relax_disp.exp_type user function when an invalid experiment type is set.
        * Added the multi-quantum CPMG and R1rho experiment types to the dispersion variables.  This is needed for the 'MQ NS CPMG 2-site' model.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Creating_a_new_experiment_type.
        * Added relaxation dispersion model lists for the MQ R1rho models.  These are stubs as no MQ R1rho models are yet supported by relax.
        * Added support for the MQ dispersion data type to the specific_analyses.relax_disp.disp_data module.  This is needed for the 'MQ NS CPMG 2-site' model.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Creating_a_new_experiment_type.
        * Added support for the MQ dispersion data types to the rest of relax.  This is needed for the 'MQ NS CPMG 2-site' model, and the changes affect the dispersion data checks and the dispersion target functions.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Creating_a_new_experiment_type.
        * Updated the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test for 'MQ CPMG' data.  This also affects the script in the shared_data test suite directory.  The relax_disp.exp_type user function exp_type argument has been changed from 'CPMG' to 'MQ CPMG'.
        * Updated the relax_disp.exp_type user function for the new 'MQ CPMG' and 'MQ R1rho' experiment types.  This is needed for the 'MQ NS CPMG 2-site' model.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Creating_a_new_experiment_type.
        * Created the 'MQ NS CPMG 2-site' model target function.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Added the 'MQ NS CPMG 2-site' R1rho calculating function to the relax library.  This is the 2-site numeric solution for multi-quantum CPMG-type data.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_library.
        * Updated the 'MQ NS CPMG 2-site' model target function to match the function in the relax library.
        * Decreased the grid increments in the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test.  This is to speed up this test.
        * Some small changes for the script for optimising Sprangers' ClpP MQ CPMG data.
        * Added the 'MQ NS CPMG 2-site' model to the dispersion auto-analysis.  This is the 2-site numeric solution for multi-quantum CPMG-type data.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_auto-analysis.
        * Added the 'MQ NS CPMG 2-site' model to the GUI model list.  This is the 2-site numeric solution for multi-quantum CPMG-type data.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * Rearranged the 'Implemented models' subsection of the dispersion chapter of the manual.
        * Fixed the 'MQ NS CPMG 2-site' model description in the relax_disp.select_model user function.  The magnitisation vector is 2D, not 3D.
        * Added a latex definition for the dwH dispersion parameter and added the 'MQ' abbreviation.
        * Added the 'MQ NS CPMG 2-site' model to the relax user manual.  This is the 2-site numeric solution for multi-quantum CPMG-type data.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Simplified the 'MQ NS CPMG 2-site' model code in lib.dispersion.
        * Fixes for the 'MQ NS CPMG 2-site' model equations in the user manual.
        * Rearrangements of the tables in the dispersion chapter of the user manual.  The tables have been shifted out into their own LaTeX files, and all dispersion model tables have been concatenated into one.
        * Edited the MQ abbreviation in the user manual.
        * Fixed some bad referencing in the dispersion chapter of the manual.
        * Docstring fix for the lib.dispersion.mq_ns_cpmg_2site.populate_matrix() function.
        * Fix for a bug in the specific_analyses.relax_disp.disp_data.loop_point() function introduced at r21060.
        * Speed ups for the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test.  This test does not pass yet, but this should allow the test to complete in under an hour.
        * Added some value.set user function calls to the script for Sprangers' ClpP data.
        * Added some value.set calls to the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test.  These user function calls will be used to test a new concept of fixing parameters in the grid search.  The dw and dwH parameters are fixed to the experimental values, as described in the README file from Remco Sprangers (in test_suite/shared_data/dispersion/Sprangers_ClpP).
        * Changed the operation of the grid search for the relaxation dispersion analysis.  If a parameter is a simple floating number type and it already has a value, then the grid search over that dimension is fixed.  The grid increments are set to 1, and the upper and lower bounds set to the parameter value.  This allows parameters to be pre-set, if known from experiment.  They will nevertheless be optimised via the minimise user function.
        * Added a printout for the pre-set dispersion parameter skipping in grid search.
        * Updated the dispersion grid search function to user the loop_parameters() function.  This is an important fix as the specific_analyses.relax_disp.optimisation.grid_search_setup() function was not matching the rest of the dispersion code, hence the parameters of the grid increments and bounds were not matching the parameter vector, scaling matrix, target function parameter depacking, etc.
        * A bit of help for some of the R1rho dispersion model system tests.  These now fail after a fundamental fix.  The problem is only due to the very coarse grid search size - a finer grid search allows the solution to be correctly found.  However as this is far too slow, instead the kex parameter is set to be close to the solution to skip a grid search dimension.
        * Some basic fixes for the Relax_disp.test_hansen_catia_input system test.  The relax_disp.catia_input user function is not complete, but this allows the Relax_disp system tests to pass.
        * The dispersion multi-processor optimisation code now prints out its own simulation messages.  This is to fix bug #21190 (https://gna.org/bugs/?21190).  The memo object now is feed in the spin IDs of the cluster and stores this as the cluster_name variable.  This is used by the results object run() method, which is run on the master at the end, to print out a message along the lines of "Simulation X, cluster yyy".  Therefore the message is only printed out once the calculation of that slave command is complete and returned to the master.
        * Replaced all usage of scipy.linalg.expm() with lib.linear_algebra.matrix_exponential.matrix_exponential().  This is for the functions of the lib.dispersion package used for the relaxation dispersion numeric solution models.  The change eliminates a bug in the scipy function which uses the Pade approximation which fails horribly for the complex part of the matrix.  The real part looks good, but the complex part looks to have nasty truncation artefacts which is propagated and amplified through the Bloch-McConnell equations.
        * Modified the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test so the models are programatically changed.
        * Changes to the Sprangers ClpP data analysis script.
        * Simplified the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test script.  The pA and kex parameters are now also pre-set to speed things up.
        * Added a script and results files for the base 'R2eff' model for Remco Sprangers' ClpP data.
        * Fixes for the R2eff data files for Sprangers ClpP data.
        * Artificially increased the errors in Sprangers ClpP data to match the publication.  The R2eff errors are simply multiplied by 5, as the errors from the paper cannot be replicated.
        * Converted the Relax_disp.test_sprangers_cpmg_data_auto_analysis system test to not use the auto-analysis.  The test has been renamed to Relax_disp.test_sprangers_data_to_mq_ns_cpmg_2site.  The optimisation is now for the cluster and has been severely cut back.  The 'MQ NS CPMG 2-site' model appears to be rubbish anyway - it looks to be indeterminate with multiple solutions, and possibly infinite lines of solutions.  The test now passes, and quickly.
        * Created the Relax_disp.test_sprangers_data_to_mq_cr72 system test.  This was copied from the Relax_disp.test_sprangers_data_to_mq_ns_cpmg_2site system test and the model changed to 'MQ CR72'.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_test_suite.
        * Added the 'MQ CR72' model to the dispersion variables.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.
        * Added the 'MQ CR72' model to the relax_disp.select_model user function frontend.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_front_end.
        * Added support for the 'MQ CR72' model to the relax_disp.select_model user function back end.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_back_end.
        * Created the 'MQ NS CPMG 2-site' model target function.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Added the 'MQ CR72' R2eff calculating function to the relax library.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_library.  The corresponding target function was updated to input the correct arguments.
        * Added the 'MQ CR72' model to the dispersion auto-analysis.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_auto-analysis.
        * Added the 'MQ CR72' model to the GUI model list.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * A number of fixes for the lib.dispersion.mq_cr72 module.
        * The lib.dispersion.mq_cr72 module now more closely resembles the cr72 module in syntax.
        * Added a relax script for the 'MQ CR72' model optimised using Flemming Hansen's CPMG data.  This is to demonstrate, though not exactly successfully, that the 'MQ CR72' model can collapse to the 'CR72' model.  The imperfection might be due to truncation artefacts in the sin ratio in the mD and mZ factors.  The results files and output log file from the script have been added to the repository as well.
        * Updates for the script and results for the 'MQ CR72' model optimised using Flemming Hansen's CPMG data.
        * Added a script and results files for optimising Sprangers' ClpP MQ CPMG data to the 'MQ CR72' model.
        * Bug fix for the dispersion specific loop_parameters() function for the multiple quantum models.  The dw and dwH parameters were being interleaved rather than all dw for all spins first and then all dwH.  The result was that these parameters were being mixed up in the MQ model target functions when clustering was activated, causing total failure of the MQ models.
        * Added a script and results files for optimising Sprangers' ClpP MQ CPMG data to the 'MQ CR72' model.  This is with all spins clustered.  It complements the files which are used for the pre-run results of the auto-analysis.
        * Better spacing in the model table of the relaxation dispersion chapter of the relax manual.
        * Added the Tollinger et al., 2001 reference for the 'NS CPMG 2-site expanded' model.  This reference was communicated in a private email.
        * Improvements for the LaTeX maths commands used in the dispersion chapter of the user manual.
        * Added Skrynnikov and Tollinger to the copyright notice in lib/dispersion/ns_cpmg_2site_star.py.  I can now see that the code derives from the funNumcpmg.m of the sim_all.tar file (https://gna.org/support/download.php?file_id=18404) attached to https://gna.org/task/?7712#comment5.  This sim_all.tar file is the original code of Nikolai and Martin.
        * Modified the relaxation dispersion auto-analysis to take nesting of MQ models.  This is specifically the nesting of the analytic 'MQ CR72' model and the 'MQ NS CPMG 2-site' models.  The analytic solution is now used as the optimisation starting point for the numeric model.
        * Used the \imath LaTeX symbol for complex numbers in the dispersion chapter of the manual.
        * Added scripts and results for optimising Sprangers' ClpP MQ CPMG data to the 'MQ NS CPMG 2-site' model.  This includes two scripts for non-clustered followed by clustered analysis using the 'MQ CR72' model in the auto-analysis so its parameters will be used as the optimisation starting point for the 'MQ NS CPMG 2-site' model.  The results files for both scripts have been added to the repository.
        * Added the 'MQ CR72' model to the relax user manual.  This is the Carver and Richards (1972) 2-site model expanded for MQ CPMG data by Korzhnev et al., 2004.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.
        * Modified the dwH symbol in the relax user manual.
        * Created a 'TODO' section in the dispersion chapter of the relax user manual.  This lists all of the features and models currently missing from the dispersion analysis in relax.
        * Added the original Maple script to the lib.dispersions_cpmg_2site_expanded module docstring for reference.  This was sent by Nikolai in a private communication.
        * More expansion of the lib.dispersions_cpmg_2site_expanded module docstring for reference.  The link https://gna.org/task/?7712#comment8 to the p3.analytical script in the Gna! tasks has been added and the contents of the sim_all.tar file funNikolai.m has been copied into the docstring as well.
        * Epydoc docstring fixes to allow the API documentation to be properly compiled.
        * Python 3 fix for the lib.dispersion.mq_ns_cpmg_2site module.  The numpy.linalg.matrix_power requires an integer power, but Python 3 was creating a floating point number for the 'fact' variable.
        * Updated the Relax_disp.test_sprangers_data_to_mq_cr72 system test so it passes.  The parameters found in the analysis located in the directory test_suite/shared_data/dispersion/Sprangers_ClpP/mq_cr72_analysis_clustered have been used as the starting point.
        * A number of Python 3 fixes.
        * Python 3 fixes for the dispersion data key generation and the data assembly.  The specific_analyses.relax_disp.disp_data.return_param_key_from_data() function was generating different keys for Python 2 and 3.  This has been fixed.  The return_r2eff_arrays() function has also been modified to correctly check for these keys.
        * Removed an insanely large log file from the Flemming Hansen dispersion data directories.  This is the log file for the CPMGFit analysis.
        * A large number of fixes for the relaxation dispersion system tested needed for the fix which changed the format of the keys by which the R2eff/R1rho data is accessed.
        * Updated the Relax_disp.test_sprangers_data_to_mq_ns_cpmg_2site system test to allow it to pass.
        * Created the new Relax_disp.test_hansen_cpmg_data_auto_analysis_numeric system test.  This will be used to test a new feature whereby pure numeric models will be used in the auto-analysis.
        * Added the model_class variable to the relaxation dispersion auto-analysis class.
        * Changed the new dispersion auto-analysis class variable model_class to the numeric_only flag.
        * Created list variables of all analytic and numeric dispersion models.  These are the MODEL_LIST_ANALYTIC and MODEL_LIST_NUMERIC lists in the module specific_analyses.relax_disp.variables.
        * Fix for the hansen_data.py dispersion auto-analysis script used for a number of system tests.  The numeric_only flag was not being handled correctly.
        * Implemented the numeric only option for the dispersion auto-analysis.  If the numeric_only flag is set to True, then no analytic models will be used in the final model selection.
        * Completed the Relax_disp.test_hansen_cpmg_data_auto_analysis_numeric system test.  This now checks all the optimised parameter values and makes sure that no 'CR72' model was selected.
        * Added a new button to the button bar in the relaxation dispersion GUI analysis tab.  This is a button used to launch the value.set user function to allow the user to pre-set certain parameters so that they are not used in the grid search.
        * Created a GUI element for the numeric_only flag of the auto-analysis for the dispersion GUI tab.  This defaults to false to allow all model types to be used.
        * Loosened the Relax_disp.test_sprangers_data_to_mq_ns_cpmg_2site system test to allow it to pass on Mac OS X.
        * Fixes to allow the Mf.test_mf_auto_analysis system test to pass on Mac OS X.  The simulated event.GetPosition() method in the Fake_right_click class the file test_suite/gui_tests/model_free.py must return a wx.Point object and not a Python tuple.  The gui.components.base_list.Base_list.on_right_click() method has also been modified with a wx.Yield() call to allow the test to pass.
        * Loosened some of the relaxation dispersion system tests to allow them to pass on MS Windows.
        * Commented out some checks of the Relax_disp.test_hansen_cpmg_data_auto_analysis_numeric system test.  This is to allow this test to pass on 32-bit GNU/Linux systems.  The numeric model optimisation is incomplete but different between the 32-bit and 64-bit systems.
        * Fix for the relaxation dispersion system test tearDown() method.  The rmtree function is no longer user, rather the test_suite.clean_up.deletion() function is being used to handle the issue of MS Windows not releasing the file in time.
        * Fix for the test_suite.clean_up.deletion() method for another MS Windows problem.  Sometimes the failed rmtree() call actually deletes the files and throws the WindowsError error.  Therefore the second rmtree() call will throw another WindowsError for the missing files.  This is now caught.
        * Elimination of the relaxation dispersion system test tearDown() method.  The functionality is fully covered by the base system test method.
        * Shifted all of the numerical dispersion code to use the internal matrix power function.  Instead of using the numpy.linalg.matrix_power() function, the relax lib.linear_algebra.square_matrix_power() function is being used instead.  This allows the code to run on many older systems, as the numpy function is relatively new.
        * Updated the Relax_disp.test_hansen_cpmg_data_to_ns_cpmg_2site_star_full system test.
        * Fix for the lib.dispersion.cr72 module for early Python versions.  For Python 2.5 and earlier, the math.acosh() function does not exist.  Therefore the numpy equivalents are now being used.
        * Loosened the checks for the Relax_disp.test_hansen_cpmg_data_to_ns_cpmg_2site_star_full system test.  This is to allow the test to pass on 32-bit Linux systems.
        * Caught a divide by zero in the specific_analyses.relax_disp.disp_data.return_offset_data() function.  This was identified by turning all numpy warnings to errors.
        * More loosening of the Relax_disp.test_hansen_cpmg_data_to_ns_cpmg_2site_star_full system test.  This is now for 64-bit Mac OS X to pass.
        * The dispersion GUI analysis cluster_update() method is now thread safe.  This removes many error messages when running the dispersion analysis in the GUI, especially for Mac OS X systems.
        * The dispersion data return_cpmg_frqs() and return_spin_lock_nu1() functions are now safer.  These specific_analyses.relax_disp.disp_data module functions can now be called when no data is present.
        * Fixes for the calc user function for the dispersion analysis.  This now does something logical for the non-R2eff models.  The chi-squared value is now being calculated and stored.  Previously this was only calculating the R2eff/R1rho values for fixed relaxation time period data for the 'R2eff' model and failing for all others.  Now the pre-existing _back_calc_r2eff() method is used to back-calculate and store the chi-squared value.
        * Redesigned the Relax_disp.test_hansen_cpmg_data_to_ns_cpmg_2site_star_full system test.  The R2A and R2B rates cannot be distinguished for this data, therefore there was no unique solution.  This resulted in too much variability between 32 and 64-bit systems as well as different operating systems.  Instead a single calc user function call is used to determine the chi-squared value for a fixed set of parameters.
        * Loosened the test_hansen_cpmg_data_to_ns_cpmg_2site_star_full system test for Mac OS X.  Even the calc user function does not help, the results are quite different between different systems.
        * The specific API calculate_r2eff() method for the dispersion analysis is now private.  This is not part of the API, so it must be made private for the test suite to pass.
        * Fix for the Mf.test_mf_auto_analysis system test on MS Windows.  The Fake_right_click.GetPosition() method now returns a valid position.  This is the original (10, 10) position.
        * Fix for a bug introduced earlier - the call to the calculate_r2eff() must also be made private.
        * Fixes for 2 Relax_disp GUI tests to match the previous model-free fixes.  The Fake_right_click.GetPosition() method now returns a wx.Point object.
        * Added test data where both the spin-lock time, the spin lock offset and the spin lock field is varied.  The data is published in "Kjaergaard, M., Andersen, L., Nielsen, L.D. & Teilum, K. (2013).  A Folded Excited State of Ligand-Free Nuclear Coactivator Binding Domain (NCBD) Underlies Plasticity in Ligand Recognition.  Biochemistry, 52, 1686-1693" with experimental conditions that "off-resonance R1rho relaxation dispersion experiments on 15N were recorded at 18.8 T and 31 C." and "using the pulse sequence of Mulder et al. with spin-lock field strengths from 431 to 1649 Hz and offsets ranging from 0 to 10000 Hz."
        * Shifted the 'NS CPMG 2-site expanded' model to the top of the CPMG numerical solutions in the manual.  This is because this is the default model which should be used in most cases.
        * A 20-25% speed increase for the 'NS CPMG 2-site expanded' dispersion model.  Many repetitive mathematical operations have been eliminated and the equations have been changed to optimise the calculation speed.
        * Modified settings script for R1rho test dataset.
        * Fix for the amsmath LaTeX package in the user manual.  It needs to be after the hyperref package, as hyperref clobbers a number of amsmath features.
        * Added all of the equations for the 'NS CPMG 2-site expanded' dispersion model to the relax manual.  These are essentially the source code modified to look good in LaTeX.
        * Fix for the 'NS CPMG 2-site expanded' model equations in the manual.
        * Better section spacing in the dispersion chapter of the manual.  Each model section is now on a new page.
        * Fix for the display of the spin-lock nu1 values in the dispersion GUI tab.  This was reported by Troels at http://thread.gmane.org/gmane.science.nmr.relax.devel/4708.  The GUI spectrum element at gui.components.spectrum was at fault, the add_disp_point() method was buggy.
        * Fix for the right click pop up menu entry "Set the spin-lock field" in the dispersion GUI tab.  This is for the spectra list relax_disp.spin_lock_field user function call.  The reference spectra are now detected and the field value set to None.  This fix has been propagated to the relax_disp.cpmg_frq user function menu entry as well.
        * Correcting the R1rho settings script for the right calculation of the spin-lock offset, omega_rf, in ppm when offset values are provided in Hz.
        * Added ZQ and DQ data to the TODO list in the dispersion chapter of the manual.
        * Fix for the relaxation dispersion specific private _cluster_ids() method.  This was identified at http://thread.gmane.org/gmane.science.nmr.relax.devel/4716.  The cluster data structure was not being referenced correctly.
        * Added some lines to the end of the script UI section of the dispersion chapter about custom protocols.
        * Added a new section to the dispersion chapter of the manual for comparing different dispersion software.  This is an expansion of the table in the paper draft.
        * Updates for the dispersion software comparison section of the user manual.
        * Bug fix for the 'MQ NS CPMG 2-site' model.  This was found with the aid of private feedback from Dmitry Korzhnev and him emailing his cpmg_fitd9 program.  The problem is that he defines the 'n' parameter as half of a CPMG block.  The code was however assuming that 'n' is a full CPMG block.
        * Added ZZ exchange as a missing feature to the dispersion chapter of the manual.
        * Added Dmitry Korzhnev's Fyn SH3 domain data for Asp 9 to the repository.  This is from Dmitry M. Korzhnev, Philipp Neudecker, Anthony Mittermaier, Vladislav Yu. Orekhov, and Lewis E. Kay (2005)  Multiple-site exchange in proteins studied with a suite of six NMR relaxation dispersion experiments: An application to the folding of a Fyn SH3 domain mutant.  127, 15602-15611 (doi: http://dx.doi.org/10.1021/ja054550e).  It consists of the 1H SQ, 15N SQ, ZQ, DQ, 1H MQ and 15N MQ data for residue Asp 9 of the Fyn SH3 domain mutant.
        * Added the results from Korzhnev's cpmg_fit program for the Asp9 Fyn SH3 dispersion data.
        * Created a relax state for the R2eff SQ data of Korzhnev et al., 2005.
        * Added printouts for the overfit_deselect() specific API method for the dispersion analysis.  This is to inform the user whenever spins are deselected and why.  This is to help avoid user confusion.
        * Started to add some preliminary dispersion results for the Korzhnev data.
        * Started the conversion of the 'MQ NS CPMG 2-site' model to 'MMQ 2-site'.  This follows from the post at http://article.gmane.org/gmane.science.nmr.relax.devel/4734.
        * Renamed all of the 'MQ NS CPMG 2-site' modules and functions for the change to 'MMQ 2-site'.  This follows from the post at http://article.gmane.org/gmane.science.nmr.relax.devel/4734.
        * Added the ZQ and DQ CPMG experiment types to the dispersion variables.  This is needed for the 'MQ NS CPMG 2-site' model change to 'MMQ 2-site' and follows from the post at http://article.gmane.org/gmane.science.nmr.relax.devel/4734.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Creating_a_new_experiment_type.
        * Created two new dispersion variables - EXP_TYPE_LIST_CPMG and EXP_TYPE_LIST_R1RHO.  This will be used to simplify identifying CPMG vs. R1rho data types.
        * Added support for the ZQ and DQ CPMG data type to the specific_analyses.relax_disp.disp_data module.  This is needed for the 'MQ NS CPMG 2-site' model change to 'MMQ 2-site' and follows from the post at http://article.gmane.org/gmane.science.nmr.relax.devel/4734.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Creating_a_new_experiment_type.
        * Completed the support for ZQ and DQ CPMG experiment types in relax.  This is needed for the 'MQ NS CPMG 2-site' model change to 'MMQ 2-site' and follows from the post at http://article.gmane.org/gmane.science.nmr.relax.devel/4734.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Creating_a_new_experiment_type.
        * The 'MMQ 2-site' model target function can now handle multiple CPMG data types.
        * Added dispersion curve plotting to the relax script for Korzhnev et al., 2005 MMQ data.
        * Turned off the dw, dwH > 0 constraint for the 'MMQ 2-site' model.
        * Added a page reference back to the intro chapter in the scripting section of the dispersion chapter.  This is to help the user work out how to run a relax script.
        * Fix for the sqrt() function in the dispersion parameter table.
        * Added a section to the dispersion chapter about spin clustering.
        * Removed most of the \clearpage commands in the dispersion chapter of the manual.  There was far too much whitespace.
        * Added a 600x600 pixel graphic for the spin cluster for use in the user manual.
        * Added the cluster graphic to the cluster section of the dispersion chapter and improved the text.
        * Proper handling of the back-calculated dispersion data for the new 'MMQ 2-site' model.
        * Shifted the optimisation printouts for the dispersion analysis out of the memo.  This improved the ordering of the printed out messages when running on a cluster.  Instead of having multiple optimisation printouts followed by a list of the corresponding optimised values, now they are interleaved as they should be.
        * Changed the definition of tex thanks to feedback from Nikolai Skrynnikov.  This was previously defined as tex = 1/(2kex) to be compatible with CPMGFit, but has now been changed to tex = 1/kex.
        * Converted the 'IT99' dispersion model parameters to pA and dw.  This is thanks to feedback from Nikolai Skrynnikov.  I have no idea why the phi_ex and pA.dw^2 parameters were being used in the first place.  The model results after the change are identical.
        * Fix for the optimised parameter printout - the parameters are now scaled.  This problem was only recently introduced.
        * The dispersion sample scripts now have the NUMERIC_ONLY boolean variable defined.
        * Decreased the number of models presented to the user in the dispersion sample scripts.
        * The model type is now being written to file for the final run of the dispersion auto-analysis.
        * Added the model_type spin variable to the dispersion analysis specific PARAMS data object.
        * Updated the text and Grace files output for the 'IT99' model in the dispersion auto-analysis.
        * Fixes for the output of the selected mode in the dispersion auto-analysis.  The correct variable is now used.
        * Proper fix for the printout of the optimised dispersion parameters.  The loop_parameters() dispersion function is no longer used, avoiding all requirements on the current data pipe existing.  This allows for proper printouts on a MPI cluster.
        * Added a page reference to the multi-processor section in the script section of the dispersion chapter.
        * Added residue 4 to the truncated CPMG data from Flemming Hansen for another test system.
        * Updated the CPMGFit results for Flemming Hansen's CPMG data truncated to 3 spins.
        * Updated the README file explaining how to convert the CPMGFit parameters to those of other software.
        * Updated the relax results for Flemming Hansen's CPMG data for the recent changes.
        * Updated the NESSY results for Flemming Hansen's data.  A number of improvements have been added to NESSY including being able top optimise residues with missing data sets.  A number of bugs have also been eliminated.
        * Updated the NESSY log for the bug fix of r1105 (in the NESSY repository).
        * Updated the ShereKhan results to include residue :4 and the ShereKhan numeric results.  The numeric model in ShereKhan was previously buggy and did not return results.  This has been fixed after I sent feedback to the authors.
        * Updated the software comparison document for a subset of Flemming Hansen's CPMG data.  This now includes residue 4, the changes in results for all software, new NESSY results due to fixes I made in NESSY, and the new results for numeric model in ShereKhan.
        * Added all of the new NESSY plots for the truncated Hansen CPMG data.
        * Fixes for all of the system tests using Flemming Hansen's CPMG data subset.  The errors are now different and the new residue 4 has to be deselected and ignored.
        * Created the new relax_disp.insignificance user function.  This will be used to deselect all spins whereby the maximum difference in all its dispersion curves is below a certain cutoff.
        * Improvements for the relax_disp.insignificance user function.  Text is now printed out when a spin is deselected.  And all spins set to the 'R2eff' model are skipped.
        * The relaxation dispersion auto-analysis now accepts the 'insignificance' argument.  This is then used in the relax_disp.insignificance user function prior to the optimisation of each model, so that spins with insignificant dispersion curves are not optimised.  The 'R2eff' and 'No Rex' models are skipped for obvious reasons.
        * Created an INSIGNIFICANCE variable for the relaxation dispersion sample scripts.  This is to allow the user to eliminate insignificant models.
        * Added the insignificance dispersion auto-analysis argument to the Hansen CPMG data optimisation script.
        * Updated script UI section of the dispersion chapter of the user manual.  This is for the recent changes to the sample scripts including the addition of the RESULTS_DIR and INSIGNIFICANCE variables.
        * Added the 'No Rex' model to the R1rho_analysis.py sample script.
        * A number of fixes for the script UI section of the dispersion chapter of the manual.  The NUMERIC_ONLY variable is now explained and the R1rho MODEL list has been changed to a set of reasonable models.
        * A GUI element for the insignificance level for the dispersion auto-analysis has been added.  This defaults to 1.0.  The user can input any number they wish.  Checks were added for non-numerical input.
        * Updated the insignificance argument docstring for the dispersion auto-analysis.
        * The dispersion analysis GUI element now uses the float GUI element for the insignificance level.  This makes sure that the user can only enter a number.
        * Created the Relax_disp.test_r2eff_read and Relax_disp.test_r2eff_read_spin system tests.  These check the operation of the currently non-existent relax_disp.r2eff_read and relax_disp.r2eff_read_spin user functions.
        * Modified the Relax_disp.test_r2eff_read system test.  A new disp_frq argument has been added for the relax_disp.r2eff_read user function.
        * Renamed specific_analyses.relax_disp.disp_data.exp_type() to set_exp_type().  This is to avoid classes with the 'exp_type' function arguments.
        * Small fix for the printout from specific_analyses.relax_disp.disp_data.set_exp_type().
        * Improved printout from the specific_analyses.relax_disp.disp_data.set_exp_type() function.
        * Improved printout for the relax_disp.cpmg_frq user function.
        * Improved printout for the relax_disp.spin_lock_field user function.
        * Implemented the relax_disp.r2eff_read user function.  Bot the frontend and backend have been implemented and are functional.
        * Created the Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff system test.  This is to test the full dispersion auto-analysis on Flemming Hansen's CPMG data using the original R2eff data rather than the derived peak heights.
        * Changes for the Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff system test.  The file paths have been changed.
        * Created files of R2eff values and errors for Flemming Hansen's CPMG data.
        * File path fixes for the script of the Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff system test.
        * The error analysis is now skipped in the dispersion auto-analysis if the 'R2eff' model is not given.  It is then assumed that R2eff/R1rho data has already been loaded into the base data pipe and hence the error analysis is not needed.  This avoids fatal errors.
        * The specific_analyses.relax_disp.disp_data.loop_time() function can now handle no relaxation times being set.
        * The relax_disp.r2eff_read user function now prints out all the data which has been read.  This feedback is useful for the user to know what has or has not been read into relax.
        * Fix for the dispersion auto-analysis if R2eff data already exists.  The data is no longer copied from the non-existent 'R2eff' data pipe.
        * Fixes for the dispersion specific overfit_deselect() method for when R2eff data is read.  This now no longer checks for intensity data but rather R2eff data, as intensity data will not be present if R2eff data is directly read rather than peak intensities.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  The setup of the auto-analysis could be simplified as the base data pipe can now contain R2eff data.  The R2eff data in the 'R2eff' data pipe was no longer being read.
        * Some small fixes to allow the optimisation of dispersion models when no peak intensity data has been read.  This is for when R2eff data has been read instead.
        * The relax_disp.insignificance user function can now handle selected spins with no R2eff/R1rho data.
        * Fixes for the Monte Carlo simulations in the dispersion analysis when R2eff data has been read.  As peak intensity data has not been read, the relaxation time period will not have been set.  The _back_calc_r2eff() method can now handle this.
        * Improved the R2eff errors for Flemming Hansen's CPMG data.  The errors are now calculated using the data from all spins rather than a truncated subset.  The errors will therefore be much more accurate.
        * Fix for return_index_from_disp_point() for when R2eff/R1rho data is loaded rather than intensities.  This specific_analyses.relax_disp.disp_data.return_index_from_disp_point() function was always subtracting 1 from the dispersion point index to take the reference spectrum into account.  This however fails if R2eff/R1rho data is loaded instead.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_auto_analysis* system tests.  The Relax_disp.test_hansen_cpmg_data_auto_analysis system test needed updating due to the more accurate R2eff errors.  The Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff system test also needed this change.  It also no longer has a spin system for residue 4.
        * Fixes for all of the Relax_disp system tests which use Flemming Hansen's CPMG data.  These are needed due to the improved error estimates in the data files.
        * Fix for a duplicated line typo in the Relax_disp.test_hansen_cpmgfit_input system test.
        * Fixed a typo in the user function name in the Relax_disp.test_r2eff_read_spin system test.
        * Fixes for the Relax_disp.test_r2eff_read_spin system test.
        * Implemented the relax_disp.r2eff_read_spin user function.  This allows R2eff/R1rho files for each spin to be read.
        * Fixed a docstring talking about RDC data in the dispersion analysis.
        * Fix for the Relax_disp.test_hansen_cpmg_data_auto_analysis_numeric system test for 32-bit Linux.  The 'NS CPMG 2-site expanded' model checks have been turned off again for residue 71 as these results are far to variable.
        * Another fix for the Relax_disp.test_hansen_cpmg_data_auto_analysis_numeric system test.  The selected model is no longer checked for residue 71.
        * Loosened the checks for a number of Relax_disp system tests to allow them to pass on 32-bit Linux.
        * Loosened a check for the Relax_disp.test_hansen_cpmg_data_to_ns_cpmg_2site_star system test for Mac OS X.
        * Loosened a check for the test_hansen_cpmg_data_to_ns_cpmg_2site_star system test for MS Windows.
        * Added some polish to the relax_disp.exp_type user function frontend.
        * Created the MODEL_LIST_CPMG_NUM dispersion list variable.  This is for defining in one place the list of models which require the number of CPMG blocks.
        * The dispersion optimisation code now checks for the relaxation time period being set for certain models.  This is for the models which require the number of CPMG blocks, calculated via the relaxation time and nu_CPMG.
        * The dispersion target function setup now uses the new MODEL_LIST_CPMG_NUM variable.
        * The dispersion specific check_exp_type() function now accepts the id argument to check individual IDs.
        * Redesigned the relax_disp.r2eff_read and relax_disp.r2eff_read_spin user functions.  These now no longer set the metadata (spectrometer frequency and experiment type) themselves.  Instead an experiment ID string must be supplied.  The spectrometer.frequency and relax_disp.exp_type user functions will therefore need to be called before these R2eff functions.
        * Fixes for the Relax_disp.test_hansen_cpmg_data_auto_analysis_r2eff system test.  This is for the changes in the relax_disp.r2eff_read user function.
        * Fixes and completion of the Relax_disp.test_r2eff_read and Relax_disp.test_r2eff_read_spin system tests.  These now handle the new user function design and now also check all of the global and spin data.
        * A number of fixes for the dispersion analysis for all the recent changes.
        * Better MMQ data support for the dispersion specific loop_cluster() function.  For the models using proton-heteronuclear multi-multiple quantum data, proton spin containers are now skipped as all the data will be analysed from the perspective of the heteronucleus.
        * Conversion of the format of the relaxation dispersion R2eff/R1rho data structures.  These are now lists of lists of lists of numpy arrays instead of pure numpy rank-4 arrays.  This only affects a number of related data structures in the dispersion target function class.  The main purpose is to prepare to have a different number of dispersion points per experiment, per spin, and per spectrometer frequency.
        * The return_cpmg_frqs() and return_spin_lock_nu1() dispersion functions now return lists of lists of arrays.  The dispersion data structures are now experiment and spectrometer frequency dependent.  Therefore the number of dispersion points can now be different for each.
        * The dispersion target function num_disp_points structure is now variable.  The number of points can now be different for each experiment type and each magnetic field strength.
        * Added a header comment to the grace2images.py script to explain its dependence on Grace.  This is thanks to feedback from Nikolai Skrynnikov.
        * Better organisation of the models by data type in the dispersion software comparison table in the manual.
        * Added Dmitry Korzhnev's cpmg_fit software to the dispersion chapter of the manual.  This is in the last section of that chapter and in the software comparison table.
        * Added the chemex software to the dispersion chapter of the user manual.
        * Updated the GLOVE details in the dispersion software comparison table in the manual.
        * Updates for the TODO section of the dispersion chapter of the user manual.  Some of the entries were rubbish.
        * Readded the accidentally deleted \clearpage command to keep the dispersion software table nicely formatted.
        * Added the scripting interface for cpmg_fit to the dispersion software comparison table in the manual.
        * Added constrained optimisation and Monte Carlo simulations to the dispersion software comparison table.  This is for the user manual.
        * Added a section on open source licencing to the dispersion software comparison table.  This is for the dispersion chapter of the user manual.
        * Updated the GUARDD details in the dispersion software comparison table of the manual.
        * Added a section about programming language to the dispersion software comparison table of the manual.
        * Added a page break for better formatting of the dispersion software comparison table of the manual.
        * Removed a now unneeded midrule from the dispersion software comparison table.
        * Editing and expansion of the dispersion software comparison table in the manual.  The optimisation algorithms are now listed, where known.  A number of entries and sections have also been rearranged.
        * More updates for the dispersion software comparison in the manual.
        * Updates for the grid search and GLOVE in the dispersion software comparison table in the manual.
        * More updates for the dispersion software comparison table in the manual.
        * Updated the dispersion software comparison table in the manual for GUARDD.  This is based on feedback from Ian Kleckner.
        * A bit more editing of the dispersion software comparison table of the manual.
        * Expanded the abbreviations of the user manual for many relaxation dispersion terms.
        * Update for NESSY in the dispersion software comparison table of the manual.
        * Added more R1rho model references to the bibliography file for the manual.  This includes the Trott and Palmer 2004 N-site and the Miloushev and Palmer 2005 2-site models.  The Trott and Palmer 2002 R1rho model reference has been expanded to include all details.
        * Added the TP04 and MP05 R1rho dispersion models to the manual.  These are not implemented in relax, or any of the software in the software comparison section, but are included for completeness.  This was pointed out by Art Palmer.
        * Added the Korzhnev et al., 2005 reference to the bibliography file for the manual.
        * Fixes for a number of page numbers in the bibtex file for the user manual.
        * Expanded the numeric dispersion models to include the linear and branched 3-site models in the manual.
        * Removed a typo from the dispersion model table.
        * Rearranged the sections of the dispersion chapter of the manual.
        * Improvements for the supported dispersion model table in the manual.  Footnotes have been added to indicate which models are not implemented yet.
        * Updated the TODO section of the dispersion chapter of the manual for the newly listed models.
        * Fix for the figure labelling in the dispersion chapter of the manual.
        * Small LaTeX layout changes to the dispersion chapter file.
        * Updated the dispersion software comparison table for the optimisation in GUARDD.  I have added the 'MATLAB interior-point black magic' algorithm as MATLAB is not kind enough to explain what algorithm it is really using.
        * The Arrhenius analysis is also performed by cpmg_fit.  This is for the dispersion software comparison table in the manual.
        * Added the TAP03 model to the dispersion chapter of the user manual.
        * Updated some ShereKhan language details in the dispersion software comparison table of the manual.
        * The dispersion GUI analysis now uses graphics.fetch_icon() for all icons.  The gui.paths module no longer exists.
        * Created the Relax_disp.test_tp02_data_to_mp05 system test.  This was copied from the Relax_disp.test_tp02_data_to_tp02 system test.  The r1rho_off_res_tp02.py system test script was modified to handle both tests by allowing the list of models to optimise to be set via the ds.models variable.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_test_suite.
        * Added the 'MP05' model to the dispersion variables.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.
        * Added the 'MP05' model to the relax_disp.select_model user function frontend.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_front_end.
        * Added support for the 'MP05' model to the relax_disp.select_model user function back end.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_back_end.
        * Created the 'MP05' model target function.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Added the 'MP05' R2eff calculating function to the relax library.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_library.  Just in case git-svn does not preserve the file copying history, the lib/dispersion/mp05.py file was copied from the tp02.py file.
        * Debugging of the 'MP05' dispersion model - optimisation is now setup correctly.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.html#Debugging.
        * Fixes and improvements to the Relax_disp.test_tp02_data_to_mp05 system test.  The MP05 model values, which are almost the same as the TP02 model parameters, are now being checked.  The optimised parameters are now being printed out to aid in debugging.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.html#Debugging.
        * Speed ups of the Relax_disp.test_tp02_data_to_tp02 and Relax_disp.test_tp02_data_to_mp05 system tests.  The optimisation precision and number of Monte Carlo simulations have both been dropped.
        * Added the 'MP05' model to the GUI model list.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * Added the 'MP05' model to the dispersion auto-analysis.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_auto-analysis.
        * Added the 'MP05' model to the relax user manual.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.  The 'MP05' model was already partly in the manual, however it was listed as unimplemented.  All of the tables and the dispersion chapter text has been updated for the model.
        * Modified the R1rho_analysis.py sample script to use the 'MP05' model.  This is the Miloushev and Palmer 2005 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_sample_scripts.
        * The limitations of the 'TP03' dispersion model are now listed in the user manual.
        * The 'MP05' and 'NS R1rho 2-site' are now nested in the dispersion auto-analysis.  As the 'MP05' model is valid across all times scales and does not require skewed populations, its optimised parameters can be used as the starting point of optimisation of the 'NS R1rho 2-site' numeric model.  This results in huge speed ups of the numeric model as previously a grid search was being performed.
        * Removed all remnants of the MQ R1rho data type.  This data type does not exist and was mostly removed, but some small bits remained.
        * Created the Relax_disp.test_tp02_data_to_tap03 system test.  This is the Trott et al, 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_test_suite This was copied from the Relax_disp.test_tp02_data_to_mp05 system test.
        * Added the 'TAP03' model to the dispersion variables.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#Adding_the_model_to_the_list.
        * Added the 'TAP03' model to the relax_disp.select_model user function frontend.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_front_end.
        * Added support for the 'TAP03' model to the relax_disp.select_model user function back end.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_disp.select_model_user_function_back_end.
        * Created the 'TAP03' model target function.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_target_function.
        * Added the 'TAP03' R2eff calculating function to the relax library.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_library.
        * Debugging of the 'TAP03' dispersion model - optimisation is now setup correctly.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.html#Debugging.
        * Debugging of the 'TAP03' dispersion model.  Removed a Unicode character from the lib.dispersion.tap03 module docstring to allow it to be used in Python 2.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.html#Debugging.
        * The lib.dispersion.tap03 module can now handle negative gamma values.  This avoids fatal errors during optimisation.
        * Many fixes for the lib.dispersion.tap03 module to match the original equations.  The 'TAP03' model solution is now similar to those of 'TP02' and 'MP05'.
        * Updated the Relax_disp.test_tp02_data_to_tap03 system test numbers to match the optimised values.  These were so close to the MP05 model values that the test was passing anyway.
        * Added the 'TAP03' model to the GUI model list.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_GUI.
        * Added the 'TAP03' model to the dispersion auto-analysis.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_auto-analysis.
        * Added the 'TAP03' model to the relax user manual.  This is the Trott, Abergel and Palmer 2003 R1rho analytic model for 2-site off-resonance exchange.  This follows the tutorial for adding relaxation dispersion models at http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax#The_relax_manual.  The 'TAP03' model was already partly in the manual, however it was listed as unimplemented.  All of the tables and the dispersion chapter text has been updated for the model.
        * Added the 'TAP03' and 'MP05' models to the abbreviations in the user manual.
        * Improvements to all of the R1rho model descriptions in the dispersion chapter of the manual.
        * Added a placeholder for the relaxation dispersion citation to the citation chapter of the manual.  The bibtex entry for this will need to be updated later once the citation is published.
        * Added support for 1H SQ CPMG data for the MMQ-type dispersion models.  The key is to skip the protons in the spin cluster loops and to instead find the proton spin containers attached to the heteronuclei of the spins of the cluster.  The EXP_TYPE_PROTON_SQ_CPMG and EXP_TYPE_PROTON_MQ_CPMG experiment type variables have been created to aid this.  The MODEL_LIST_MMQ list variable has also been created to more consistently identify the MMQ-type dispersion models.  The has_disp_data() function has been created to simplify the finding of dispersion data for a given cluster, experiment type, spectrometer frequency and dispersion point.  The has_proton_sq_cpmg() and has_proton_mq_cpmg() are used to determine if there is proton dispersion data for the given heteronucleus.  The loop_exp() function has been modified to yield the proton SQ and MQ data if present.  Similarly the num_exp_types() and return_index_from_exp_type() functions exhibit different behaviour if this data is present.  The return_r2eff_arrays() function now assembles all of the proton data on top of the heteronuclear data by fetching the protons attached to the heteronuclei and aliasing the correct spin for the given experiment type.
        * Updated the relaxation dispersion target functions.  The input data structures have changed type.
        * Implemented the 'MMQ 2-site' CPMG model equations from the Korzhnev et al., 2005 reference.  The paper reference is "Dmitry M. Korzhnev, Philipp Neudecker, Anthony Mittermaier, Vladislav Yu. Orekhov, and Lewis E. Kay (2005).  Multiple-site exchange in proteins studied with a suite of six NMR relaxation dispersion experiments: An application to the folding of a Fyn SH3 domain mutant.  J. Am. Chem. Soc., 127, 15602-15611.  (doi:  http://dx.doi.org/10.1021/ja054550e)".  The original code from Mathilde Lescanne and Dominique Marion has only slightly been modified for this change as the MQ data treatment in the Korzhnev et al., 2004 reference is the same as in the 2005 reference, but using a different notation.  This has been renamed to r2eff_mmq_2site_mq().  The new r2eff_mmq_2site_sq_dq_zq() function has been added to the lib.dispersion.mmq_2site module to allows the SQ, DQ, and ZQ R2eff data to be calculated.  This function follows the notation of the 2005 paper.  The populate_matrix() function has been modified to only accept one combined chemical shift difference value.  It can now also accept different values for R20A and R20B, though the mmq_2site module defaults to R20A=R20B.
        * The r2eff_mmq_*() functions of lib.dispersion.mmq_2site now accept different R20A and R20B arguments.  These are set to the same thing within the dispersion target function.
        * Converted the spin specific 'r2', 'r2a', and 'r2b' dispersion parameters from lists to dictionaries.  The new parameter keys are based on the experiment type and the spectrometer frequency.  These keys are supported by the generate_r20_key() and decompose_r20_key() pair of functions in the specific_analyses.relax_disp.disp_data module.  This enables support for different R20 parameters for each experiment type - a key piece of infrastructure for the MMQ models.  The relax_disp.select_model user function backend was modified so the parameter list only contains one instance for each of the 'r2', 'r2a', or 'r2b' strings.  The specific_analyses.relax_disp.parameters.loop_parameters() function was modified so that the R20key rather than frequency index is returned for the R20 parameters.  Many other code changes were required.
        * The R20 values are now correctly handled in the dispersion target function for MMQ-type data.
        * Simplified the 'MMQ 2-site' dispersion model target function.  The r2eff_mmq_2site_sq_dq_zq() and r2eff_mmq_2site_mq() functions from lib.dispersion.mmq_2site are now aliased by the experiment_type_setup() target function method.  Both functions now have matching arguments.
        * Change of the base relaxation dispersion experiment types.  The base CPMG-type experiment has been changed from "CPMG" to "SQ CPMG".  This is for better combined proton-heteronuclear SQ, ZQ, DQ, and MQ (MMQ) data support.  The relax_disp.exp_type user function now also as the proton SQ and MQ CPMG-types available to select from rather than the previous behaviour of relax automatically determining the type from the spin type.  All of the CPMG experiment type variables in specific_analyses.relax_disp.variables have been renamed for better ordering.  Many changes were therefore required.
        * Fix for the specific_analyses.relax_disp.disp_data.num_exp_types() function.  This needed updating after the change in the relaxation dispersion experiment type variables.
        * Different relaxation time periods for each experiment is now taken into account in the dispersion code.  Previously only the first relaxation time period was being used.  This was fine for single data type models, but was preventing the MMQ-type models from working.  Now the return_r2eff_data() function of the specific_analyses.relax_disp.disp_data module assembles and returns the relax_times data structure which has two dimensions - the experiment type and the magnetic field strength.
        * Added a relax script to optimise just the 15N SQ CPMG data from Korzhnev et al., 2005.  The corresponding log file has also been added to the repository.
        * Created the Relax_disp.test_korzhnev_2005_15N_sq_data system test.  This is used to check the optimisation of the 15N SQ CPMG data using the 'MMQ 2-site' model.
        * Fixes for the dispersion optimisation Disp_result_command.run() method.  The dispersion point loop is fixed over all dispersion points, but the 'missing' data structure has a variable length.
        * Big redesign of the dispersion point returning and loop_*() functions.  These are the functions in the specific_analyses.relax_disp.disp_data module.  The return_cpmg_frqs() and return_spin_lock_nu1() functions now no longer take the spins and spin_ids arguments.  Instead they determine if a dispersion point exists for the given experiment and spectrometer frequency using the intensity keys and data in the base of the data pipe.  The specific_analyses.relax_disp.disp_data.loop_*() functions now accept the return_indices argument which if True will cause all of the relevant experiment type, spectrometer frequency, dispersion point, and relaxation time indices to be returned.  The behaviour of the loop_point() method is now different.  Instead of looping over all possible dispersion points, it only loops over those points present for the given experiment and spectrometer frequency.  This change allows for many simplifications and latent bug fixes in the dispersion analysis.
        * Added cmpg_fit input and results files for the 15N SQ CPMG data from Korzhnev et al., 2005.
        * Added cmpg_fit input and results files for all single CPMG data combinations from Korzhnev et al., 2005.
        * Updated the cpmg_fit results for the Korzhnev et al., 2005 single data sets.  The starting point for optimisation is now the solution for using all data together.  This allows a much better solution to be found for each script.
        * Created 5 more system tests for checking the optimisation of single sets of Korzhnev et al., 2005 data.  These are Relax_disp.test_korzhnev_2005_15n_dq_data, Relax_disp.test_korzhnev_2005_15n_mq_data, Relax_disp.test_korzhnev_2005_15n_zq_data, Relax_disp.test_korzhnev_2005_1h_mq_data, and Relax_disp.test_korzhnev_2005_1h_sq_data.  These should individually test out all parts of the 'MMQ 2-site' dispersion model.
        * The cpmg_fit script for the Korzhnev et al., 2005 15N ZQ CPMG data now starts at the relax solution.  This is to try to find better solutions for dw and dwH, thought it was not so successful.
        * Updated the Relax_disp.test_korzhnev_2005_15n_zq_data system test.  It now starts at the relax solution and the test passes as it seems to reasonably match the cpmg_fit results.
        * Reintroduced the F vector into r2eff_mmq_2site_mq() to calculate the magnetisation.
        * Added the cpmg_fit results for optimisation all of the Korzhnev et al., 2005 CPMG data.  This is for the 2-site model.  It includes all proton-nitrogen SQ, ZQ, DQ, and MQ data.
        * Updated the cpmg_fit results for all Korzhnev et al., 2005 data.
        * Shifted the relax results for the 15N SQ Korzhnev 2005 CPMG data to its own directory.  The relax save state and grace curve have been added to the repository as well.
        * Created a Grace plot of the failed cpmg_fit results.  This is for the Korzhnev et al., 2005 data, using all data sets.
        * Fixes for the cpmg_fit results for all of the data from Korzhnev et al., 2005.  The dwH value must start negative, otherwise optimisation will fail to find the correct minimum.
        * Created a Grace graph for the 1H SQ data fitting of cpmg_fit.
        * The dispersion specific overfit_deselect() method now handles the MMQ-type models better.
        * The 'MMQ 2-site' dispersion model can now be optimised if no heteronuclear R2eff data is loaded.
        * Many more fixes for the MMQ-type dispersion models for the proton spin data.
        * Added many new relax results for the CPMG data form Korzhnev et al., 2005.
        * The R2eff data key has been changed in the dispersion analysis.  The experiment type has been added to the key so that R2eff data is not mixed up when data from multiple experiments is present.
        * Updated the synthetic 'TP02' model data for the recent changes.
        * Fix for the dispersion base_data_loop() method for deselected spins.  A recent change broke this function when spins were deselected.
        * Updated the truncated CPMG data set from Flemming Hansen to include residue :4.  This is deselected in the test suite, but allows the comparison in the shared_data directory to use all four spins (:4, :70, :71).
        * Changed the current data pipe in the relax saved states for Flemming Hansen's truncated CPMG data.
        * Another change of the base relax files of the truncated CPMG data.
        * Bug fix for the relax_disp.cpmgfit_input user function.  The nu_CPMG values need to be doubled and then divided by 1e3 to obtain the 1/tau_CPMG values in ms.
        * Fix for the relax_disp.sherekhan_input user function for the recent changes.
        * Updated all of the results for the truncated CPMG data from Flemming Hansen in the test suite.  The results are now different as the errors are now much more precise as they come from all spin systems rather than just the truncated set of :4, :70, and :71.
        * Bug fix for the Ishima and Torchia 1999 dispersion model.  Their value of omega_1eff is defined in terms of nu_CPMG, hence it is missing the radian unit.  This is clearly a mistake, but is probably compensated by their stated rather than derived definitions.
        * Updated all of the relax results for the IT99 model fix.
        * Added the new relax IT99 model results to the software_comparison file.  This is for the truncated CPMG data from Flemming Hansen.
        * Fix for the LM63 dispersion model equation in the manual.
        * The CR72 dispersion model descriptions now emphasise the fact that it is not accurate on all time scales.  This is for the dispersion chapter of the user manual.
        * Modified the relax_disp.select_model user function CR72 model descriptions.  Instead of saying all time scales, the 'CR72', 'CR72 full', and 'MQ CR72' model descriptions instead now say most time scales.
        * Minor equation improvement in the dispersion chapter of the manual.
        * Fix for the relax_disp.plot_disp_curves user function in the GUI.  The directory argument was incorrectly set to the 'dir' type rather than 'dir sel' type so it was not shown in the GUI.
        * Created the relax_disp.write_disp_curves user function.  This is based on feedback from Nikolai Skrynnikov.  The user function will generate one file per spin system and dump all of the R2eff values (measured, back calculated, and errors) into the file.
        * The relax_disp.write_disp_curves user function is now called from the dispersion auto-analysis.
        * Another bug fix for the IT99 model.  This was pointed out by Nikolai Skrynnikov that the omega_1eff definition is incorrect and instead it should be omega_1eff = 4 * sqrt(3) * nu_CPMG.
        * Updated the Relax_disp.test_hansen_cpmg_data_to_it99 system test for the IT99 model fixes.
        * Updated the relax results for the truncated CPMG data from Flemming Hansen.  This is needed as the IT99 model has been fixed and the new relax_disp.write_disp_curves user function introduced.
        * Fix for the relax_disp.write_disp_data user function.  The spectrometer frequency in the output files is now in MHz.
        * A small output formatting change for the relax_disp.write_disp_curves user function.
        * The relax_disp.write_disp_curves user function is now more robust for when data is missing.
        * Fix for the setup of the Relax_disp.test_korzhnev_2005_1h_mq_data system test.
        * Fixes for the Relax_disp.test_hansen_cpmgfit_input system test.  These are needed as the relax_disp.cpmgfit_input user function has been fixed resulting in different files being produced.
        * Bug fix for the relaxation dispersion model selection.  Deselected spins in the current pipe were being skipped, so for model selection between different data pipes that results in spins not being used when they should be.
        * Bug fix for the dispersion specific model_information() method.  This can now handle deselected spins with no data.
        * Bug fixes for the model_loop() method no longer skipping deselected spins.  This is needed for model selection when the spins from all data pipes are deselected.
        * One last fix for the dispersion analysis for the changes of the model_loop() method.
        * Updated the relax script for optimising Flemming Hansen's CPMG data.
        * Better support for the MMQ-type data dispersion models for the end of the optimisation.  The back calculated R2eff values are now handled correctly for the attached proton in the spin system.
        * Updated the Relax_disp.test_korzhnev_2005_15n_dq_data system test so it passes.  The optimised values are very similar to that from cpmg_fit, so the code must be functioning correctly.
        * Improvement for the file names in the relax_disp.plot_disp_curves user function.  The '_' character is now used between the experiment name and the rest of the file name.
        * Bug fix for the specific_analyses.relax_disp.disp_data.find_intensity_keys() function.  This function was not handling multiple experiment types correctly.
        * Created the Relax_disp.test_korzhnev_2005_all_data system test for checking the 'MMQ 2-site' model.  This checks against all six data types, 1H SQ, 15N SQ, DQ, ZQ, 1H MQ, and 15N MQ.  This is currently set to the values found by cpmg_fit.  As this is the true solution, relax should find similar parameter values.
        * Created a Grace plot of the 15N MQ CPMG data fitting from cpmg_fit.
        * Bug fix for the multiple quantum relaxation dispersion models.  These require both the heteronuclear and proton chemical shift differences.  But the proton difference was being scaled by the heteronuclear Larmor frequency and not the proton frequency.
        * The relaxation dispersion calculate user function now stores the back calculated R2eff values.  A number of changes were required for this.  The code from the end of the Disp_result_command.run() method was converted to the function specific_analyses.relax_disp.disp_data.pack_back_calc_r2eff().  This allows the back calculation R2eff unpacking code to be shared.  The new has_proton_mmq_cpmg() function has also been created to simplify the code.
        * Bug fix for the dispersion calculate user function.
        * Created a script to compare the cpmg_fit and relax solutions for the 'MMQ 2-site' dispersion model.
        * Clean ups and speed ups of the 1H MMQ flag calls.
        * Large improvements to the relax_disp.plot_disp_curves user function including MMQ model support.  This user function now handles multiple dispersion data sets better by placing each into a new graph.  All graphs have also been improved by matching the colours of the sets for each field strength and using different symbols and line styles to emphasize the data.
        * Fixes for the relax_disp.plot_exp_curves user function for the lib.software.grace changes.
        * The relax_disp.plot_disp_curves now shows the experiment type as part of the Y-axis label.  This is to allow for easy identification of the experiment when more than one is present.
        * Bug fix for the 'MMQ 2-site' dispersion model target function.  The relaxation time was being taken as that of the first experiment for all experiments.  This is a relic from the code being copied from a single experiment type model.
        * Converted the 'MQ CR72' dispersion model to handle MMQ data.  This model can now handle proton-heteronuclear SQ, ZQ, DQ, and MQ CPMG-type data.  Some debugging might still be required.
        * Fix for the 'MQ CR72' model for MQ-type data.  The check to prevent acos of a number less than 1 has been changed to switch the sign rather than to set the back calculated R2eff to 1e99.
        * Another bug fix for the 'MQ CR72' dispersion model.  The nu_CPMG value rather than the relaxation time was being used to calculate the R2eff values as the division by 'n' was missing.
        * The relax_disp.plot_disp_curves user function can now handle values of NaN.  These are simply replaced by 0.0 to allow Grace to open the file.
        * Fixes for the 'MQ CR72' dispersion model target function.
        * Removed a latent bug in the 'MMQ 2-site' dispersion model.  This was not being seen but might have caused problems in the future.
        * Fix for the 'MQ CR72' dispersion model target function.  The correct R20 values are now extracted from the parameter vector.
        * Improvements for the 'CR72' and 'MQ CR72' dispersion model R2eff calculating functions.  The numpy.arccosh() function can handle all input values when complex, therefore the checks for the real part being above 1 are not necessary.
        * General improvement for the optimisation of many target functions.  For those models which use the tau_CPMG value, this is now recalculated.  This means that if a user inputs truncated nu_CPMG values, these are corrected when calculating tau_CPMG so that full precision values will be used for the optimisation.
        * Changed the sign of the delta_omega frequency for the ZQ data in the 'CR72' and 'MQ CR72' models.
        * Last fix for the 'MQ CR72' dispersion model.  The wrong value was being subtracted from the first eigenvalue - the value of log(Q)/relax_T should not be divided by the number of CPMG blocks.
        * Simplified the first 'MQ CR72' dispersion model formula in the manual.
        * Created a relax script to compare the 'MQ CR72' dispersion model results to cpmg_fit.  The cpmg_fit solution is used as the input parameters for relax, and then a calc user function call is used to back calculate the R2eff values.  These values are then plotted to show the perfect match.
        * Bug fixes for the 'MMQ 2-site' dispersion model.  The matrix power factor must be found with the Python math.floor() function and not int() as the later will sometimes round up.
        * Updated all of the relax vs. cpmg_fit comparison files in the shared data directory.  These now show the perfect match between the programs.  The cpmg_fit source code was modified to improve the accuracy of the gyromagnetic ratio values.
        * Updated the cpmg_fit results for the CPMG data of Korzhnev et al., 2005.  This is using a modified binary wherein the gyromagnetic ratio and optimisation tolerances and maximum number of iterations are far more accurate (to the same level as relax).  The cpmg_fit output has also been made more accurate by writing out the values to much higher precision.
        * Fixes for the relaxation dispersion system tests for the changed behaviour of the 'CR72' model.  The optimisation is slightly different as values are now always passed into the numpy.arccosh() function.
        * Eliminated the MODEL_LIST_CPMG_NUM variable.  This was far too specific and its misuse caused a bug in the target function of a number of dispersion models.
        * Fixes for a number of dispersion system tests due to the higher accuracy of the tau_CPMG values.  This is required as the tau_CPMG values have been corrected to eliminate user input truncation artifacts.
        * The Relax_disp.test_korzhnev_2005_all_data system test no longer dumps files in the current directory.
        * Updated all of the cpmg_fit results to use the numeric 2-site CPMG model.  This also uses the modified cpmg_fit binary with higher accuracy.
        * Updated the Relax_disp.test_sprangers_data_to_mq_cr72 system test to pass.  The 'MQ CR72' model is now much more accurate due to a number of recent bug fixes.
        * Fixes for all of the Relax_disp.test_korzhnev_2005_*_data system tests.  These now start optimising at the solution found by cpmg_fit.  All tests now pass.
        * Fix for the legends in the Grace graphs produced by the relax_disp.plot_disp_curves user function.
        * The grid search for the MMQ-type models now looks for negative chemical shift differences.
        * Converted the dispersion api method _back_calc_r2eff() into a function of the optimisation module.
        * Updated the spin-lock field strength data structures to be experiment and field specific.  This allows different spin-locks to be used as different field strengths, or different experiments.  It brings the structures in line with those for CPMG-type experiments.
        * Updates for the dispersion auto-analysis system tests using Flemming Hansen's data.  The grid search increments have been increased by one to make sure the solution is always found.
        * Increased the range of chemical shift differences in the grid search for the dispersion models.  The range was too narrow.
        * Fix for the Relax_disp.test_hansen_cpmg_data_auto_analysis system test.  The kex value check needed to be scaled back.
        * The relax_disp.plot_disp_curves user function now produces interpolated dispersion curves.  For this the new 'num_points' and 'extend' arguments have been added to the user function to give the user better control of this plotting.  The interpolated curve is disabled from the numeric CPMG models as these do not support interpolation, and the 'R2eff' model as interpolation is not needed.  To support this, the specific_analyses.relax_disp.optimisation.back_calc_r2eff() function has been extended to support the CPMG frequencies or spin-lock field strengths been supplied instead of retrieved.  This allows a set of custom dispersion points to be used in the back calculation.  The dispersion target function setup was modified to prevent the recalculation of tau_CPMG values when asked, as interpolation is not compatible with this.
        * The relax_disp.plot_disp_curves user function now places the X-axis at zero.  This is for better visualisation of the residuals.
        * Interpolated curves are now produced for the numeric CPMG-type models.  This if for the relax_disp.plot_disp_curves user function.  The resolution of these are limited to the frequency of a single CPMG block in the relaxation time period.  Therefore the plots are produced slightly differently.  To enable this functionality, the new count_exp() and return_relax_times() functions have been added to the specific_analyses.relax_disp.disp_data module.
        * Improved the text for the relax_disp.plot_disp_curves user function.
        * Fix for the interpolation for the numeric CPMG-type models in relax_disp.plot_disp_curves.
        * Updated the relax results files for the CPMG data from Korzhnev et al., 2005.
        * Improvements to the data-type labelling in the dispersion chapter of the user manual.
        * The dispersion model GUI window is now set to a reasonable size for most screens.  The scrolled panel now allows all contents to be shown while having the window smaller than its contents.  The height of 750 pixels should be visible on the majority of computer monitors.  According to Google Analytics, ~13% of visits to http://www.nmr-relax.com have screen resolutions of 1366x768, therefore the dispersion model list window should now not be bigger than their screens.
        * Merged the 'MQ CR72' dispersion model into the MMQ data type sections in the tables of the manual.
        * Implemented model elimination for the relaxation dispersion analysis.  This currently uses the pA limits of 0.501 < pA < 0.999 to determine if a model has failed.  To implement this, the dispersion API methods deselect(), eliminate(), get_param_names() and get_param_values() were written.  These were copied from the model-free analysis and modified as needed.
        * Model elimination is now activated in the dispersion auto-analysis.
        * The relaxation dispersion target function class can now handle cpmg_frqs arguments of None.  This is useful for R1rho models.
        * Bug fix for the recently added dispersion API eliminate method.  This was accidentally always eliminating the model.
        * Created a new section in the dispersion chapter of the manual covering optimisation.  This describes the auto-analysis, the chi-squared function, the grid search values, how optimisation is implemented, the linear constraints used, the diagonal scaling, model elimination, and the use of OpenMPI.  It absorbs the clustering section.
        * Improvements for the dispersion API eliminate() method.
        * Added text about the relax_disp.insignificance user function to the dispersion chapter of the manual.
        * Updates for the 'MMQ 2-site' model equations in the manual.
        * Added the tex > 1.0 model elimination rule for the dispersion analysis.
        * Updated the description of the dispersion auto-analysis in the manual.
        * Added a MC simulation elimination section to the dispersion chapter of the manual.
        * Fix for the new analysis GUI wizard - two model-free analysis buttons were present.  This is due to an imperfect merge of the relax_disp branch back to trunk.
        * Fixes for the lib.software.grace for an imperfect merger of the relax_disp branch.
        * Fix for the Noe.test_noe_analysis system test.  The old Grace file was turning the legend first off and then on, but now this is fixed.
        * Fixes for the Relax_disp.test_tp02_data_to_tp02 GUI test.  This should have been fixed in the relax_disp branch.
        * Fix for the Wiz_window.setup_page() method.  The user function SetValue() methods are no longer called but instead the Uf_page.SetValue() method is used to set up user function arguments.  This is important as this later method can properly handle the free file format arguments and other special arguments whereas the former cannot.
        * Attempts at fixing and improving the Relax_disp.test_hansen_trunc_data GUI test.  These changes have uncovered a spin ID updating problem in the relax data store after calling the residue.delete user function.
        * Fix for two system tests to prevent relax save files from being dumped in the installation directory.  This would have been fatal for the tests suite on systems with relax installed as root.
        * Fix for the GUI tests for a wxPython 2.9 ListCtrl.HitTest() bug.  This only affects the relax test suite.  The suite should now pass on all systems.
        * Shifted the dispersion chapter of the user manual to its correct position.  Somehow during the relax_disp branch merger, this chapter was shifted into the "Advanced Topics" partition of the manual.
        * API documentation fix for test_suite.system_tests.relax_disp.Relax_disp.setup_korzhnev_2005_data().
        * Limited the optimisation time in the N_state_model.test_populations system test.  This test can take a huge amount of time on Mac OS X and MS Windows (~6 seconds on Linux, ~360 seconds on Mac OS X, and ~120 seconds on MS Windows, all on similar hardware).  Now the minimise user function max_iter argument is set to 2000 to speed the test up.
        * Increased the speed of the N_state_model.test_populations system test again.  The maximum number of iterations for the minimise user function is now set to 500.
        * Fix for the N_state_model.test_populations system test on Mac OS X.  The optimisation on Macs is not as precise as on Linux, so the test was loosened.
        * Fix for the Relax_disp.test_m61_exp_data_to_m61 system test on 32-bit Mac OS X.  The optimisation precision was not great enough to find the minimum, so the grid search increments have been increased from 3 to 4.
        * Loosened all of the Relax_disp.test_korzhnev_2005_*_data system tests to pass on Mac OS X.  This should hopefully fix the tests for MS Windows as well.
        * More loosening of the Relax_disp.test_korzhnev_2005_*_data system tests to pass on Mac OS X.  These problems were identified on a different test machine.
        * Loosened all checks of the N_state_model.test_populations system test.  This is needed for the woeful optimisation capabilities of Mac OS X (and partly MS Windows as well).
        * Avoided some wxPython 2.9.4.1 in the Relax_disp GUI tests.  wxPython is quite buggy, so certain checks and tests cannot be performed.
        * Fix for the specific_analyses.relax_disp.optimisation.back_calc_r2eff() function.  The R2eff error data structure when the cpmg_frqs or spin_lock_nu1 argument is supplied was all zeros, whereas it should all be ones.  This was causing many divide by zero numpy warnings to appear on certain operating systems (Mac OS X).
        * The relax system test base tearDown() method should now be fail proof.  Most code is now warped in a 'try: except: pass' block to catch all failures.
        * Improvements in the test_suite.clean_up.deletion() function.  It is now more fail safe on Python 3 by completely avoiding the WindowsError checking.


    Bugfixes:
        * Bug fixes for a number of broken Oxygen icon lookups in the GUI.
        * Bug fixes for the molecule.delete, residue.delete and spin.delete user functions.  The molecule, residue, and spin metadata in the relax data store was not being updated correctly after these user function calls so that any subsequent operations on this data was failing.  This metadata problem was not noticed before as it disappears if the state is saved and reloaded into relax after a restart.



Version 3.0.2
(26 November 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/3.0.2

    Features:
        * Much better pseudo-atom support, including not requiring tetrahedral geometry.
        * The value.write user function can now create files with non-numeric data, such as the models for each spin.
        * Improvements to the 2D Grace plotting from the grace.write user function including full support for multiple graphs and the setting of the axes to the zero point.


    Changes:
        * Updated the Release Checklist document rsync instructions to allow resumed uploads.  This is needed if the internet connection has been cut, as uploading can take a long time.
        * The test_suite.clean_up.deletion() function can now handle the case of missing files and directories.  This problem was occurring in the relax_disp branch for some of the system tests.
        * Created the is_int() and is_num() functions for the lib.check_types module.
        * The value.write user function can now properly handle non-numeric data types.  This allows the spin specific model name to be written to file, or any other string defined in the specific analysis PARAMS data object.
        * The multi-processor section of the manual is now labelled in the correct position.
        * Created a special GUI analysis element for floating point numbers.  This allows for user input of floating point numbers into one of the GUI analysis tabs.  If the input is not a number, the original value will be restored.
        * Created the new pipe_control.spectrum.add_spectrum_id() function.  This is used to handle the creation of spectrum ID strings in the data store.  This way new spectrum IDs can be created from different parts of relax in a controlled way.
        * Created the pipe_control.spectrometer.check_frequency() function to standardise this check.
        * Created the pipe_control.spectrometer.get_frequency() function for returning the frequency for a given ID.
        * The pipe_control.spectrum.add_spectrum_id() function now returns silently if the ID already exists.
        * Improvements to the pymol.view and molmol.view user functions for finding the PDB files.  Now the possibility that this is being run from a results subdirectory is taken into consideration.  If the file cannot be found, the os.pardir parent directory is added to the start of the relative path and the file checked for.
        * The rdc.read user function will now skip all lines of the RDC file starting with '#'.  To include molecule identifiers at the start of the line will now require quotation marks.
        * Shifted the RDC and PCS assembly methods from the main class to the data module for the N-state analysis.
        * Created the pipe_control.mol_res_spin.is_pseudoatom() function to simplify pseudo-atom handling.
        * Created the pipe_control.mol_res_spin.pseudoatom_loop() function.  This is used to loop over the spin containers corresponding to a given pseudo-atom.
        * Added a PDB file and RDC values (and absolute J+D and J) for propylene carbonate.  This will be used for testing of pseudo-atoms in the N-state model analysis.
        * Renamed the propylene carbonate files to the correct name of pyrotartaric anhydride.
        * Created two new system tests based on the new pyrotarctic anhydride long range (1J, 2J & 3J) RDC data.  The first (N_state_model.test_pyrotartaric_anhydride_rdcs) optimises an alignment tensor using long range signed RDC data.  The second (N_state_model.test_pyrotartaric_anhydride_absT) optimises an alignment tensor using long range absolute T (J+D) data.  Both test long range data together with methyl group pseudo-atom data.
        * Added all of the pyrotartaric anhydride RDC generation scripts and files.  This is simply for reference and reproducibility.
        * Modifications for the pyrotartaric anhydride system test script.  The grid search now is much quicker, and the RDC correlation plots are now sent to DEVNULL.
        * Added the return_id argument to the pipe_control.mol_res_spin.pseudoatom_loop() function.  This will then yield both the spin container and spin ID string.  This mimics the spin_loop()function.
        * Added proper pseudo-atom support for the RDCs in the N-state model analysis.  This involves a number of changes.  The pseudo-atom specific functions ave_rdc_tensor_pseudoatom() and ave_rdc_tensor_pseudoatom_dDij_dAmn() have been added to the lib.alignment.rdc module.  These simply average the values from the equivalent non-pseudo-atom functions.  The return_rdc_data()function in the specific_analyses.n_state_model.data module has been modified to assemble the RDC constants and unit vectors for all members of the pseudo-atom and add these to the returned structures, as well as a new list of flags specifying if the interatom pair contains pseudo-atoms.  The N-state model target function and gradient have been updated to send the pseudo-atom data to the new lib.alignment.rdc module functions.
        * J couplings for the N-state analysis are now properly handled for pseudo-atoms.  The measured J couplings for the members of the pseudo-atom should not be used, but rather that of the pseudo-atom spin itself (as the former does not exist).
        * Eliminated the old pseudo-atom handling in the N-state model specific return_rdc_data() function.  This was multiplying the RDCs by -3 to handle the tetrahedral geometry of the 1J methyl RDCs.  However this approach is not valid for non-methyl pseudo-atoms or for 2J, 3J, etc. data.
        * A RelaxError is now raised for the N-state model optimisation with gradients when T = J+D data is used.  The gradients for this data type are not implemented yet, so it is better to prevent the user from using this.
        * The N_state_model.test_pyrotartaric_anhydride_absT system test now uses simplex optimisation to pass.  The Newton algorithm cannot be used as the gradients for T = J+D type data have not been implemented.
        * An RDC error of 0.0 will now deselect the corresponding interatomic data container.  This can be used for simpler pseudo-atom handling.
        * Updated the menthol long range RDC data file to include pseudo-atom member distances.
        * Renamed the interatomic_loop() function 'selected' argument to 'skip_desel'.  This is to match the spin_loop() function arguments.
        * The interatom.unit_vectors user function now calculates the unit vectors for deselected containers.  This is useful for pseudo-atom handling where the interatomic containers to the pseudo-atom members have already been deselected.
        * Updated the value checking for the N_state_model.test_absolute_rdc_menthol system test.  The pseudo-atoms are now properly handled so the result is now much better.
        * The stereochemistry auto-analysis can now accept a file of interatomic distances.  This is for better pseudo-atom support.
        * The N-state model specific check_rdcs() function now properly handles pseudo-atoms.
        * The pipe_control.rdc.q_factors() function now properly handles pseudo-atoms.  If pseudo-atoms are present, then 2Da^2(4 + 3R)/5 normalised Q factor is skipped.
        * Created the N_state_model.test_pyrotartaric_anhydride_mix system test.  This is used to demonstrate a bug in the N-state analysis using mixed RDC and long range absolute J+D data.
        * Movement of N-state model specific code to the analysis neutral pipe_control package.  Many of the functions of the specific_analyses.n_state_model.data module relating to alignment tensors, RDC data and PCS data have been shifted in to the pipe_control package modules align_tensor, rdc, and pcs respectively.  This allows these functions to be made more general and allow the code to be shared with the frame order analysis or any future analysis using such data, and hence remove some code duplication.
        * Create two new warnings RelaxNucleusWarning and RelaxSpinTypeWarning to match the equivalent errors.
        * Added some RDC data checks to the N_state_model.test_pyrotartaric_anhydride_rdcs system test.  This is to demonstrate a problem with the data assembly function pipe_control.rdc.return_rdc_data().
        * Clean ups and improvements for the pipe_control.rdc.check_rdcs() function.  Pseudo-atoms are now handled much better and correctly in all cases.  And many RelaxErrors have been converted to RelaxWarnings followed by a 'return False' statement.
        * Created the pipe_control.rdc.setup_pseudoatom_rdcs() function.  This is used to make sure that the pseudo-atom interatomic systems (the containers from heternucleus to pseudo-atom and heteronucleus to pseudo-atom members) are properly set up.  It will deselect the interatomic containers if incorrectly set up or if they are not part of the main pair.
        * Added quotation marks around a number of spin IDs with molecule names in some RDC data files.  This is for the N-state model population model data used in the test suite.
        * The rdc.read and j_coupling.read user functions now ignore all lines starting with the # character.  This is to remove all comment lines silently.  Therefore if spin IDs are used which contain the molecule name, then they should be wrapped in quotation marks.
        * Updated a number of RDC test suite data files to have quotation marks around the spin IDs.  This is to allow the molecule identifier to be present while not being mistaken for a comment line.
        * Updated some of the RDC data files used in the frame order system tests.  The spin IDs are now in quotation marks as the molecule name is included.  This is to prevent the line being removed as a comment.
        * Changes to the setup_pseudoatom_rdcs() function and renamed it to setup_pseudoatom_rdc().  The interatomic loop is now within the function to make sure that all is completed before the containers are accessed.
        * Started to add better pseudo-atom support for the PCS.  The new pipe_control.pcs.setup_pseudoatom_pcs() function has been added to deselect the spins which are members of a pseudo-atom.  The return_pcs_data() function in the same module now calls this function and builds a list of pseudo-atom flags for use in the target function (though it is still unused).
        * Finally eliminated the gui.paths module, replacing it with graphics.fetch_icon() calls.  The GUI was using a mix of the old gui.paths module and the fetch_icon() function.
        * Created the pipe_control.sequence.return_attached_protons() function.  This is used to return a list of proton spin containers attached to the given spin.
        * Improved Grace graph scaling and arrangement when multiple graphs are present.  The lib.software.grace.write_xy_data() function now executes the 'autoscale' command for each graph and executes the 'arrange' to layout the graphs automatically.
        * The Grace plotting (via lib.software.grace) now fully supports the plotting of multiple graphs.
        * Improvements to the lib.software.grace module.  The set colours are now applied to all set objects.  And the axis label and tick sizes are now much smaller.
        * Created the --numpy-raise command line option.  When this is set, all numpy warnings will be converted to errors.  This is to aid in debugging to locate where the warning messages are coming from.  These appear as RelaxWarnings, but there is no indication as to where the problem is.
        * The lib.software.grace module now supports setting the X and Y axes at zero.
        * Modified the model list GUI window.  This can now be resized and it uses a scrolled panel to allow the contents of the window to be bigger than the window size.


    Bugfixes:
        * Fix for bug #21233 (https://gna.org/bugs/?21233) - the missing mpi4py multi-processor messages.  When multiple commands were being sent to one slave, the captured IO was being overwritten by each executed command.  Therefore the slave would only return the printouts from the last command.
        * Fix for a fatal bug in the rarely used structure.add_atom user function.  The position argument in the user function definitions was incorrectly defined causing the user function to be non-functional.  The 'float_object' argument type is now supported in the GUI.
        * Fix for the N-state model _target_fn_setup() method for when no PCS data is present.
        * Bug fix for the lib.structure.mass.centre_of_mass() function warning when the element is not known.  This warning was buggy and resulted tracebacks.



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

    Features:
        * Improved handling of peak lists.
        * Simplification of the user function GUI elements for those associated with the free file format.
        * Support for the reading of chemical shifts into the relax data store with the new  chemical_shift.read user function.
        * Improvements to the appearance of the GUI by using more unicode.
        * Redesign of the model list GUI element used in the model-free analysis.


    Changes:
        * The font size is no longer set for the latex2html compiled user manual.
        * A number of updates and improvements to the document explaining how to setup a Mac OS X framework.  This Framework Python setup is used to build the binary distribution files.
        * Updated the Mac Framework testing script to handled 4-way binaries (ppc74 included).
        * Better support for 4-way binaries in the Mac OS X Framework detection script.
        * Added support for the 'current ar archive random library' file type in the Mac OS X Framework testing script.
        * Added py2app to the Mac OS X Framework setup instructions.
        * Shifted code from pipe_control.spectrum to the new lib.spectrum.peak_list relax library module.  This follows from http://thread.gmane.org/gmane.science.nmr.relax.devel/3972/focus=4347.
        * Added a special script for locating all Python versions and printing out the installed modules.
        * Large change to the free file format GUI element for the user functions.  The GUI element used in the user function wizard windows has been modified to have both a 'default' form, which is the previous design, and a 'mini' form which is now used for the user functions.  This mini form only uses 1 row, rather than the default of 6 or 8.  It is a read only text element with a button that launches the free file format window.  The amount of space saved is huge.
        * Improved the text for the mini free file format GUI element.
        * Updated all of the user function GUI window sizes for the 'mini' free file format GUI element.  This allows much more text of the description to be displayed.
        * Updated the Mac Framework setup document to help with scipy compilation problems.
        * Improved the Python seeking and module version print out script for symlinks.  This should now be much more capable of finding all Python versions on a system.
        * Added support for the Mac OS X Modelfree4 binary results to the Palmer.* system tests.  The Mac OS X Modelfree 4.20 binary produces different results than the Linux binaries, mainly due to a compilation problem.  In the Linux binaries, the results are written out to 4 decimal places.  In the Mac binaries, the results are instead written out to 4 significant figures.  Therefore the number of decimal places are much less than the Linux results.
        * Syntax error fix for one of the unused scripts in the relax test suite shared data directories.  This problem was encountered by Jack Howarth <howarth att bromo dott med dott uc dott edu> and communicated in a private message.  The issue was found by fink.  This script is never used and will never be used again - it is only there for reference.
        * Modification of the spectrum.read_intensities user function front end.  The heteronuc and proton arguments have been eliminated.  Instead the new dim argument is used to associate the data with the spins of any dimension in the peak list.
        * Replaced the 'heteronuc' and 'proton' arguments of the spectrum.read_intensities user function backend with 'dim'.
        * Created the new lib.spectrum.objects module.  This will hold temporary data structures for representing peak lists and other spectral data.  The module currently contains the Peak_list class which is used to hold peak list data.
        * Started to shift the spectrum.read_intensities user function backend to use lib.spectrum.peak_list.
        * The pipe_control.spectrum.read_intensities() function now works with the Peak_list object.
        * The Peak_list object is now used by the lib.spectrum.peak_list.read_peak_list() function.
        * The lib.software.sparky.read_list_intensity() function now operates on the Peak_list object.
        * Changed the spectrum.read_intensities dim argument default to w2 and improved the long description.
        * Fix for the assignment handling in the lib.software.sparky.read_peak_list() function.  The first element is usually the indirect dimension or w2.
        * Fix for many of the Peak_list system tests for the user function argument changes.  The heteronuc and proton arguments have been replaced by the dim argument.
        * The lib.software.xeasy.read_list_intensity() function now operates on the Peak_list object.
        * The lib.software.nmrview.read_list_intensity() function now operates on the Peak_list object.
        * The lib.spectrum.peak_list.intensity_generic() function now operates on the Peak_list object.
        * Fixes for the pipe_control.spectrum.read() function.  An error was referencing a now non-existent variable and the docstring has been fixed.
        * The Peak_list object can now store peak intensity names.  This is for peak lists such as from NMRPipe seriersTab files where the peak list covers multiple spectra.
        * The NMRPipe seriesTab peak lists are now supported through the Peak_list object.
        * Unit test fixes for the spectrum.read_intensities user function argument changes.
        * Fixes for a few system tests for the spectrum.read_intensities user function argument changes.
        * Fixes for a few GUI tests for the spectrum.read_intensities user function argument changes.
        * Changes for the spectrum.read_intensities user function dim argument.  The default is now w1, the indirect dimension in a 2D experiment.  The description has also been fixed.
        * Fixes for all of the peak intensity reading functions - the w1 and w2 dimensions were swapped.
        * Updates to the sample scripts for the spectrum.read_intensities user function argument changes.
        * Updates to the user manual for the spectrum.read_intensities user function argument changes.
        * Created the Chemical_shift.test_read_sparky system test for the reading of chemical shifts.  This is for the reading of shifts from a Sparky peak list.  It tests the currently non-existent chemical_shift.read user function.
        * Created some incredibly basic icons for the chemical shift user functions.  These are simply an omega symbol and will need to be replaced by something better in the future.
        * Created the chemical_shift.read user function.  This includes both the front and back end code.
        * Shifted all the modules from lib.software to do with peak lists to lib.spectrum.  This is for a more logical organisation, as these modules are solely used by the lib.spectrum.peak_list module.
        * Renamed all of read_*() functions of the lib.spectrum modules for consistency.  These functions will now be used to read all types of data from a peak list, from the assignments to chemical shifts to peak intensities, and everything in between.
        * Modified the peak list object.  The peak list dimensionality variable is no longer private, and many values of None are now converted to lists of None so that the peak list data is easier to handle.
        * Fix for the proton name in the new Chemical_shift.test_read_sparky system test.
        * Expanded the functionality of the lib.spectrum.sparky.read_list() function.  Now the dimensionality of the peak list is automatically determined, and all peak lists from 1D to 4D are supported.  The chemical shifts are also automatically detected and extracted from the list and placed into the peak list object.  The peak intensity data is also automatically detected,therefore the int_col argument is no longer used.
        * The lib.spectrum.sparky.read_list() function can now auto-detect the peak volume column and use it for intensities.
        * Created the Chemical_shift.test_read_xeasy system test.  This is for checking the reading of chemical shifts from a 2D XEasy peak list.
        * Implemented the reading of chemical shifts in the lib.spectrum.xeasy.read_list() function.
        * Created the Chemical_shift.test_read_nmrview system test.  This, if not obvious from the name, is for checking the reading of chemical shifts from an NMRView peak list.
        * Implemented the reading of chemical shifts in the lib.spectrum.nmrview.read_list() function.
        * Assignments can now contain lowercase letters in Sparky and NMRPipe seriesTab peak lists.
        * Fix for the unit test for the reading of intensities from Sparky peak lists.
        * Updated the nmrPipe processing script in the relax user manual.  This is in response to the post by Troels Linnet at http://thread.gmane.org/gmane.science.nmr.relax.user/1520.  The text has also been expanded to better explain spectral processing.
        * Improvements for the description of the NMRPipe processing script in the R1/R2 chapter of the user manual.
        * LaTeX fix for the curvefit chapter of the user manual.
        * The isInf() and isNan() functions of lib.float can now handle values of None.  If None is encountered, the functions simply return False.
        * The model-free optimisation code now handles minfx returning nothing.  This is due to the fix of bug #21001 (https://gna.org/bugs/?21001) in relax, which is really a fix for an upstream minfx (https://gna.org/projects/minfx/) bug (bug #21090 at https://gna.org/bugs/?21090).
        * Created the Mf.test_bug_21079_local_tm_global_selection system test.  This is to catch bug #21079 (https://gna.org/bugs/?21079).
        * Extended the Mf.bug_21079_local_tm_global_selection system test for all Monte Carlo simulation steps.
        * The model_free.select_model user function GUI element now uses unicode for the model parameters.  The tau character is now used for the tm, te, tf, and ts parameters.  And a superscript 2 is used for the order parameters.
        * The model lists in the model-free GUI auto-analysis now use unicode for the S2 parameters.
        * The peak intensity wizard in the GUI is now more robust.  The wizard_update_ids() method can now better handle missing data.  This is encountered if a user skips the first elements of the wizard.
        * Created Wiz_window.setup_page() for user function wizard pages to allow for simpler GUI tests.  This method can be used to setup any user function wizard page with all its arguments set.  It accepts all keyword arguments and sets these for the wizard page, translating to GUI strings as needed.  This should save a lot of lines in the GUI tests.
        * Simplified the Noe.test_noe_analysis GUI test by using the new Wiz_window.setup_page() method.
        * Python 3 fixes for all of the unicode strings in relax.  Instead of using the u"xyz" notation, now unicode("xyz") is being used.  This works as the relax compat module sets the builtin unicode() function to str() for Python 3, as all strings in Python 3 are unicode and hence both the Python 2 u"xyz" and unicode() code are undefined in Python 3.
        * Defined two new functions called u() in the compat module for better unicode string support.  The two functions are defined differently for Python2 and Python3.  The Python3 function simply returns the text unmodified, as all strings are unicode.  The Python2 function converts the str type to a unicode type.
        * The new compat.u() function is now being used for all unicode strings.
        * All "local tm" text in the GUI now uses a subscript m unicode character as well as the tau character.
        * Created the pipe_control.spectrum.test_spectrum_id() function for checking if a spectrum ID exists.
        * Renamed pipe_control.spectrum.test_spectrum_id() to check_spectrum_id().  A bug in the function was also removed, and the other code in the module now uses this function.
        * Created the pipe_control.mol_res_spin.check_mol_res_spin_data() function.  This will check for the existence of molecule, residue and spin data and raise a RelaxError if none exists.
        * Simplification of the data checks in the pipe_control.spectrum module.  This is using the new pipe_control.*.check*() functions.
        * Huge speed up of the GUI tests by the removal of the N_state_model.test_populations test.  This problem was identified by running the GUI tests with the '--time' flag.  One one test machine, this single test took ~142 seconds to complete when the entire GUI tests took ~242 seconds (i.e. this one test took up to 60% of the whole test suite).  This test comes directly from a system test, but the equivalent system test only takes about 6 seconds to complete.  The difference is due to the slow generation of the user function GUI pages.
        * Created the new RelaxNoPeakIntensityError error object.
        * The compat.SYSTEM variable is now set to 'Windows' when 'Microsoft' is detected.  This is for easier identification of MS Windows systems, as either string could be used.
        * Created the new gui.text module for holding all of the unicode text for the GUI.  This module contains unicode strings for the various analysis types, which are then all defined in one location.  This is for consistency.
        * Converted the model-free user function definitions to use the new gui.text module strings.
        * Shifted the gui.text module to lib.text.gui to avoid a fatal circular import in the GUI.
        * MS Windows fixes for the GUI for missing unicode font glyphs.
        * Added some Mac OS X GUI string fixes for missing unicode characters to lib.text.gui.
        * The size of the model list GUI window can now be changed.
        * Redesign of the model list GUI element.  The wx.ListCtrl element has been replaced by a wx.FlexGridSizer combined with wx.CheckBox and wx.StaticText.  The result is a much nicer formatting of the element.  The checkboxes in the old element displayed slight rendering problems on all operating systems and did not look neat.  The new design is also more flexible in that models of None are now treated as separators in the window.
        * The model list GUI element can now display an optional model description column.
        * Added model descriptions and adjusted the size of the model-free model list GUI elements.
        * Refinements for the model list GUI window.  The font for all text elements is now set.  And the elements of the wx.FlexGridSizer are now vertically centred so that the text of the checkboxes and text elements line up perfectly.
        * The size of the model list GUI window is now automatically set to the best fit.
        * The model list GUI element is now centred after the autosizing.
        * The titles in the model list GUI window now use a smaller font size.
        * Update of the description of the interatom.define user function.
        * Added multi-processor support for Monte Carlo simulations.  This simply involves accessing the multi-processor box singleton and running the processor.run_queue() method within the pipe_control.minimise.minimise() function.  This currently does nothing as the processor queue is always empty.  But if the code in the specific_analyses package is modified to add slave commands to the processor but not execute the run_queue() method, then the Monte Carlo simulations will be automatically parallelised.
        * Updated the spectrum.error_analysis user function backend to use the lib.statistics.std() function.  This simplifies the code.  It affects only the peak intensity error analysis when spectra have been replicated.
        * Created the Structure.test_bug_21187_corrupted_pdb system test to catch bug #21187.  The bug at https://gna.org/bugs/?21187 was reported by Martin Ballaschk (https://gna.org/users/mab).
        * Bug fix for the specific analysis API _data_init_spin() method.  This is used for the API init_spin() method.  This is a latent bug which does not affect any of the current analyses in relax.  It was discovered in the relaxation dispersion branch.
        * Added a new is_queued() method to the Processor object of the multi package.  This allows the Processor object for the uni and mpi4py multi-processor to be queried to see if any slave commands have been queued.
        * Created a unit test for the lib.linear_algebra.matrix_exponential module.  This module does not exist yet, but it will be used to replace the scipy.linalg.expm() function use in the relaxation dispersion branch.
        * Loosened the lib.linear_algebra.matrix_exponential.matrix_exponential() unit test checks.
        * Implemented the lib.linear_algebra.matrix_exponential.matrix_exponential() function.  This handles square matrices in either complex or real form.
        * Created the lib.check_types.is_complex() function.  This is used to determine if a number is a Python or numpy complex type.
        * The lib.linear_algebra.matrix_exponential.matrix_exponential() function now uses lib.check_types.is_complex().  This fixes the function for complex matrices.
        * Created a new unit test for lib.linear_algebra.matrix_exponential.matrix_exponential() for complex matrices.
        * Fix for the new lib.linear_algebra.matrix_exponential.matrix_exponential() function.  This function now returns a numpy array type rather than matrix type.


    Bugfixes:
        * Bibtex fixes required for proper latex2html compilation.
        * Fix for the Palmer.test_palmer_omp for the different Modelfree4 binaries.  The gcc and pdf binaries are now properly detected and the slightly different results are now correctly checked for.
        * The graphics.fetch_icon() function can now return either the absolute or relative path to the icon.  This is a partial solution for bug #21042 (https://gna.org/bugs/?21042).
        * Fix for bug #21042 (https://gna.org/bugs/?21042).  The docs/latex/fetch_docstrings.py now asks the graphics.fetch_icon() function for the relative path to the icon rather than the absolute path.
        * The fetch_docstrings.py script now asks for the Unix '/' separator through graphics.fetch_icon().  This is a final fix for bug 21042 (https://gna.org/bugs/?21042).  The graphics.fetch_icon() function now accepts the 'sep' argument.  This defaults to os.sep.  But the docs/latex/fetch_docstrings.py script uses the Unix '/' separator to obtain a LaTeX correct path on MS Windows.
        * Modified the create_mc_data() method to partly fix bug #21079 (https://gna.org/bugs/?21079).  Some spins with local tm models remain selected despite not containing any data.  These are handled explicitly.  Instead of a RelaxNoModelError being raised, the method returns None to indicate that something went wrong.
        * Final fix for bug #21079 (https://gna.org/bugs/?21079).  This is the failure of the dauvergne_protocol auto-analysis when the "local tm" global model is selected.  The Monte Carlo create_data() method not skips data from the base_data_loop() if the create_mc_data() method returns None.
        * Fix for bug #21097 (https://gna.org/bugs/?21097).  This was a simple typo.  It has not been encountered before because it is in a rarely encountered RelaxError.
        * Fix for bibtex warning 'Warning--string name "mb" is undefined'.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for latex bibtex string 'cp' instead of 'cj'.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Another fix for bibtex string 'cp' instead of 'cj'.  Progress sr #3071: https://gna.org/support/?3071 - Implementation of Tollinger/Kay dispersion model (2001).  Following the guide at: http://wiki.nmr-relax.com/Tutorial_for_adding_relaxation_dispersion_models_to_relax.
        * Fix for bug #21187 - the corrupted PDB issue with protons atom numbers of zero.  The bug at https://gna.org/bugs/?21187 was reported by Martin Ballaschk (https://gna.org/users/mab).  The fix was to allow for spin containers in the relax data store to have the same atom number, as long as the atom names are different.
        * Modified the Monte Carlo simulation printout behaviour for the minimisation related user functions.  This is to help in fixing bug #21190 (https://gna.org/bugs/?21190).  This includes the calculate, grid_search, and minimise user functions.  The new multi-processor is_queued() method is used to determine if the optimisation code of the specific analysis has queued rather than run the calculations.  If queued, the 'Simulation X' text will not be printed out.  This avoids printing out all the text at the start before anything has happened.  The specific multi-processor optimisation code must provide it's own printouts when each calculation is complete.



Version 3.0.0
(6 August 2013, from /trunk)
http://svn.gna.org/svn/relax/tags/3.0.0

    Features:
        * Huge amounts of code throughout the relax codebase has been shifted into independent functions in the relax library.
        * Many new functions added to the relax library.
        * Complete rearrangement of the relax package and module layout.
        * Clean up and improvements to the relaxation curve-fitting C module including the removal of a severe memory leak eating up all the RAM when lots of spins are analysed simultaneously.
        * Complete redesign of the 2D graphing code for improved data visualisation and to allow expansion to software other than Grace.
        * Polishing of the GUI - many bug fixes and improvements throughout the GUI.
        * Addition of the --time command line option for the relax test suite.
        * Large speed ups of the relax test suite.
        * Merger of the dipole_pair and interatomic user function classes into the new interatom user function class.
        * Added support for J couplings.
        * Import cleanups throughout relax, avoiding potential future bugs and making the code much cleaner.
        * Addition of many new scripts for use by the relax developers.
        * Support for the NMRPipe SeriesTab format in the spectrum.read_intensities user function.
        * Improvements for all code examples in the relax user manual including much better fonts, formatting, line wrapping, line numbering, and colouring using the lstlisting LaTeX enviroment.
        * Created the relax language definition for the lstlisting LaTeX environment for better colouring of relax scripts in the user manual.
        * Converted the Citations chapter of the relax user manual into a preface chapter.
        * Overhaul of the indexing in the relax user manual.
        * Higher level structuring of the user manual into parts.
        * Creation of the optimisation chapter of the relax user manual.
        * General improvements throughout the user manual.


    Changes:
        * Some small clarifications and reordering of the release checklist document.
        * Shifted the pipe_control.structure.superimpose module to lib.structure.superimpose.
        * Shifted the pipe_control.structure.statistics module to lib.structure.statistics.
        * Created the unit test infrastructure for the lib.structure package.
        * Shifted the pipe_control.structure.pdb_read and pipe_control.structure.pdb_write modules to lib.structure.
        * Shifted the pipe_control.structure.cones module to lib.structure.cones.
        * Split the pipe_control.structure.mass module into two with the CoM code going to lib.structure.mass.
        * Removed the data pipe checks from the internal structural object.  This decoupling from the relax data store is in preparation for moving into the lib.structure package.
        * More decoupling of the internal structural object from the relax data store.  Removed the ability of the internal structural object to determine if two atoms are connected by consulting the relax data store.
        * Created the empty lib.structure.internal package for holding the internal structural object.
        * Shifted part of the internal structural object into the lib.structure.internal.models module.  This contains the two classes ModelList and ModelContainer from the pipe_control.structure.api_base module.
        * Shifted part of the internal structural object into the lib.structure.internal.molecules module.  This contains the class MolList from the pipe_control.structure.api_base module.
        * Shifted the MolContainer class from pipe_control.structure.internal into lib.structure.internal.molecules.  This is in preparation for shifting the internal structural object to lib.structure.internal and for the elimination of the unused and no longer useful ScientificPython structural object.
        * Created the empty lib.structure.represent package.  This will be used to hold modules which generate 3D structures as geometric representations of abstract ideas such as tensors, cones, frames, etc.
        * Shifted the lib.structure.rotor module to lib.structure.represent.rotor.
        * Total elimination of the ScientificPython PDB object.  Maintaining this reader was too much effort and the internal structural object has now surpassed the capabilities of the ScientificPython PDB object (for example the internal object is not PDB specific).  And ScientificPython is very much a dead project, largely replaced by the more successful scipy.
        * Merged the structural API base module api_base into pipe_control.structure.internal.  The API base class is no longer needed as the ScientificPython PDB reader has been eliminated.
        * Deleted the unit tests of the structural API base class.
        * Moved the residual pipe_control.structure.api_base module to lib.structure.internal.displacements.  This is because the base module still contained the Displacements class.
        * Docstring consistency in the internal structural object.
        * Shifted the pipe_control.structure.internal module to lib.structure.internal.object.  This is the new location of the internal structural object.
        * Shifted the selection object out of pipe_control.mol_res_spin and into the new lib.selection module.  The dependence on the MoleculeContainer, ResidueContainer and SpinContainer objects have been removed, as this is part of the relax data store.  Therefore all of the private methods (__contains__, __contains_mol_res_spin_containers, and __contains_spin_id) have been deleted.  The contains_*() will need to be used instead.
        * The pipe_control.mol_res_spin functions no longer use the selection object __contains__() method.  All functions now use the contains_*() methods of the lib.selection.Selection object.
        * Shifted parse_token() and tokenise() from pipe_control.mol_res_spin to lib.selection.
        * The lib.selection.parse_token() function is using the new Python way of splitting strings.  This is via the string's split() method.
        * Removed the no longer used parser argument for reading PDB files from some unit tests.
        * Removed the unit test of the parser argument of the structure.read_pdb user function.  The argument no longer exists.
        * Shifted the cone geometric object representation functions to lib.structure.represent.cone.  The structure.create_cone_pdb user function first calls pipe_control.structure.main.create_cone_pdb() which then calls lib.structure.represent.cone.cone().  This allows the pipe_control function to write out the file and add it to the data pipe's results file list.
        * Fixed some name classes in the namespace of pipe_control.structure.mass.
        * Shifted the diffusion tensor structural object code to lib.structure.represent.diffusion_tensor.  The user function routes to pipe_control.structure.main.create_diff_tensor_pdb(), which pulls the tensor info out of the data store, and then calls the diffusion_tensor() function of lib.structure.represent.diffusion_tensor to create the representation, writes out a PDB file, and finally adds the file to the data pipe's results file list.
        * More removals of the now dead parser argument for the structure.read_pdb user function.
        * Removed the parser argument from structure.read_pdb in the stereochemistry auto-analysis.
        * Restored the selection object __contains_spin_id() method as contains_spin_id().  This will allow for faster checks for matches to spin ID strings.
        * Speed ups for the interatom_loop() by restoring some of the code previously deleted.  This spin ID lookup table is being used again, as this is much faster than the string parsing of spin IDs.
        * The frame order analysis is now using the correct centre of mass function.
        * Shifted calc_chi_tensor() and kappa() from pipe_control.align_tensor to lib.alignment.alignment_tensor.
        * Shifted some of the pipe_control.diffusion_tensor functions to lib.diffusion.main.
        * Created the empty lib.software package.  This will be for functions which create input, read output, or control external programs.
        * Shifted and decoupled some of the grace code into lib.software.grace.  This includes most of the write_xy_header() and write_xy_data() functions.  The data store specific part of write_xy_header() has been shifted into pipe_control.grace.axis_setup().
        * Missing import fix for the lib.alignment.alignment_tensor module.
        * Shifted the lib.opendx package to lib.software.opendx.
        * Shifted the lib.xplor module into the lib.software package.
        * Shifted the Bruker Dynamics Centre parsing code into the new lib.software.bruker_dc module.
        * Deleted the completely unused pipe_control.spectrum.Bruker_import class.  This was added by Michael Bieri in Oct 2011, but the code has never been used.  Other, simpler code has replaced its functionality.
        * Created the Ct.test_bug_20674_ct_analysis_failure system test for catching bug #20674.  This was reported by Mengjun Xue <mengjun dott xue att mailbox dott tu-berlin dot de> at https://gna.org/bugs/?20674.
        * Decreased the number of Monte Carlo simulations in the Ct.test_bug_20674_ct_analysis_failure system test.
        * Created the Jw.bug_20674_jw_mapping system test.  This is a modification of the Ct.test_bug_20674_ct_analysis_failure system test for catching bug #20674 (https://gna.org/bugs/?20674).  The test script was duplicated and the small modifications made to convert it into the J(w) mapping analysis.  This now reveals the same bug but for the J(w) mapping analysis.
        * System test speed ups - decreased the number of Monte Carlo simulations in many tests.  Running 500 simulation optimisations in a system test is a total waste of time!
        * Converted the bug_20674_jw_mapping.py system test script to use the self._execute_uf() interface.  This allows the script to be used in the GUI.
        * Created the Mf.test_bug_20683_bdc_inf_values system test.  This is for catching bug #20683 (https://gna.org/bugs/?20683) reported by Mengjun Xue <mengjun dott xue att mailbox dott tu-berlin dot de>.  The problem is due to infinite and NaN values in the Bruker Dynamics Centre file.
        * Ported the changes of r19302 to the consistency testing and J(w) mapping analyses.  This is the code for checking for infinite relaxation rates imported from Bruker Dynamics Centre files.
        * Missing imports of the lib.float.isInf() function.
        * Modified the bug_20674_ct_analysis_failure.py system test script to use self._execute_uf().  This allows the test to operate as a GUI test, which was failing.
        * Created the specific API common method _data_init_spin().  This will be used as a general method for aliasing to data_init() for initialising spin parameters.
        * Added printouts for the select.read and deselect.read user functions to identify the spins affected.
        * Created the new lib.list module with the function count_unique_elements().  This function will be used to determine the unique number of elements in a list.
        * Shifted the Sparky peak intensity reading code to lib.software.sparky.read_list_intensity().  This new function comes from the old pipe_control.spectrum.intensity_sparky() function, but with the spin ID code removed.
        * Shifted the XEasy peak intensity reading code to lib.software.xeasy.read_list_intensity().  This new function comes from the old pipe_control.spectrum.intensity_xeasy() function, but with the spin ID code removed.
        * Docstring fix for the lib.software.xeasy.read_list_intensity() function.
        * Shifted the NMRView peak intensity reading code to lib.software.nmrview.read_list_intensity().  This new function comes from the old pipe_control.spectrum.intensity_nmrview() function, but with the spin ID code removed.
        * Created the lib.software.sparky.write_list() function and associated unit test.  This will be used to create simple Sparky .list files.
        * The relaxation curve-fitting analysis parameters are now all lowercase.  This is to match the other analysis types so that the parameter names are identical to the corresponding variable name.  This is assumed by some of the specific analysis API methods.
        * Removal of junk code in the _assemble_scaling_matrix() relaxation curve-fitting method.
        * Parameter scaling is now functional in the target_function.relax_fit.c code.  Previously the scaling was not being used and the Python to C conversion was broken.
        * The scaling matrix is now converted into a usable list of diagonal elements for the relax_fit C module.
        * Simplified the code of the relax_fit C module.
        * The common spin methods of the specific analysis API now ignore parameters not in the model.  This affects the _data_init_spin(), _sim_init_values_spin(), and _sim_return_param_spin() methods.  The result is that the spin containers no longer hold parameter variables set to None for non-model parameters.
        * Created the pipe_control.plotting module.  This will be used as a base for the plotting of all types of data.  This includes the current OpenDX and Grace modules, as well as future modules.  The determine_functions() function has been added and is used to simplify the pipe_control.grace.get_data() function.
        * The grace.write user function data type argument sequence values have changed.  Instead of 'spin', this can now be 'res_num' or 'spin_num' to specify that either the residue number or spin number should be plotted on the desired axis.  The x_data_type now defaults to 'res_num'.
        * Created the pipe_control.mol_res_spin.count_max_spins_per_residue() function.  This will be used by the plotting module to determine if more than one spin per residue exists.
        * Fixes for the change of the grace.write user function data type 'spin' to 'res_num'.
        * Updated the pipe_control.plotting.determine_functions() function.
        * Added the skip_desel flag to the important pipe_control.mol_res_spin.spin_loop() generator function.  This is used to skip deselected spins within the loop.  As must of the code in relax using the spin_loop() does this anyway, this can be used to simplify many of the spin looping elements in relax.
        * Expanded the relax_fit system test script to produce all types of currently supported Grace graphs.  This is to more extensively test the grace.write user function.
        * Large redesign of the 2D graphing code in relax.  This currently affects only the grace.write user function, but the new infrastructure will make it much easier to expand the graphing abilities and to support other 2D graphing software.  The plotting code has also been significantly simplified.  The pipe_control.grace.get_data() function has been shifted into the pipe_control.plotting module.  It has been split up into the base assemble_data() function with the data assembly shifted to assemble_data_scatter(), assemble_data_seq_value() and assemble_data_series_series().  This split massively simplifies the code by not packing all different graph and set combinations into one.  In addition the auxiliary functions classify_graph_2D(), fetch_1D_data(), get_functions(), and get_data_type() have been created to maximise code sharing between the different assemble_*() functions.
        * Modified the relax_fit system test script to generate a new type of graph.  This is the residue number sequence verses the peak intensity series data (and vice versa) via the grace.write user function.  This is to help in the implementation of this graph type.
        * Created the pipe_control.plotting.assemble_data_seq_series() function.  This is to allow the residue or spin numbering to be plotted against any series type data (lists or dictionaries), or vice versa.
        * Added a link to the PDF user manual from the HTML user manual.  This will affect all pages at http://www.nmr-relax.com/manual/ by adding an icon to the navigation bar pointing to the PDF manual at http://download.gna.org/relax/manual/relax.pdf.
        * The plotting of residue or spin numbers verses values now handles multiple spin types properly.  This is in the pipe_control.plotting.assemble_data_seq_value() function.  The spin name is being used to identify different spin types for the graph sets.
        * The pipe_control.mol_res_spin.count_max_spins_per_residue() function now accepts a spin ID argument.  This can be used to restrict the spins to count.
        * The spin ID string is now being used by the plotting functions.  The spin ID was not being passed into the assemble_data_*() functions.
        * Changed how pipe_control.plotting.assemble_data_seq_value() determines the number of graph sets.  Instead of counting the maximum number of spins per residue, different spin names are now checked across the sequence.  This is needed as a single residue could have a different type of spin.  This was caught by the Mf.test_dauvergne_protocol system test.
        * Modified pipe_control.plotting.assemble_data_series_series() to handle dictionaries with keys as values.  This will be useful in, for example, relaxation dispersion for plotting the dispersion curves.  In this case, the R2eff values are in a dictionary where the keys are the values to plot against.  This is different from the current case where the X and Y data dictionaries are required to have the same keys.  These changes expand the capabilities of the grace.write user function.
        * Formatting change for the auto_analyses __all__ package list.
        * Removed the import of the auto-analysis modules into the auto_analyses package __init__ module.  This import is not needed.
        * The N-state model system test module now imports the auto-analysis to fix an import order error.
        * Added a warning for the spectrum.read user function if a peak intensity of zero is encountered.  This value can cause singular matrix failures in certain optimisation algorithms.
        * The spectrum.error_analysis user function can now be performed on a subset of all spectra.  The subset argument has been added to allow the error analysis to be restricted to a subset of all loaded spectral data.
        * Created the lib.list.unique_elements() function for returning a list with duplicates removed.
        * Shifted the standard deviation code from the Monte Carlo error_analysis() function to the lib package.  The new function lib.stats.std() is now used to simplify the error_analysis() function and allow the code to be reused.  This will be useful for expanding the pipe_control.monte_carlo.error_analysis() function to handle parameters which are dictionaries, for example as in the relax_disp branch.
        * The Monte Carlo error_analysis() function now handles dictionary type parameters.
        * Renamed the new lib.stats module to lib.statistics.
        * Spun out the model list GUI element from the model-free auto-analysis into its own module.  This GUI element is now the gui.analyses.model_list.Model_list class.  This code has been spun out as the GUI element will be used by the relaxation dispersion branch.
        * The gui.analyses.model_list.Model_list GUI element now can have tooltips via the tooltip class variable.
        * Rearrangements of the gui.analyses package.  The new gui.analyses.elements package has been created and the model list and text and spin GUI elements have all been shifted into the package.
        * Spun out the Spin_ctrl analysis GUI element into its own module in gui.analyses.elements.
        * The relaxation time part of the spectra list GUI element can now be turned on or off.
        * The execution of the user function GUI pages can now be delayed.  The create_page() execute flag has been added to disable execution.  This can be later forced with the new on_execute() force_execute flag.
        * Modified the GUI new analysis wizard to return a list of user function on_execute methods.  This will be used in the relax_disp branch and in the future for when a special user function page is added to the new analysis wizard.  This allows the use of user function pages with execution delayed until the analysis __init__() method is being run.
        * Standardisation of the text of the GUI elements of the analysis frames and expansion of the tooltips.  All the text parts of the Spin_ctrl and Text_ctrl elements now end in a colon.  Tooltips are now present on all elements and have been expanded and improved.
        * The Text_ctrl analysis frame GUI elements  now have separate tooltips for the buttons.  This is to give a hint to the user as to what the button does.
        * The model selection GUI analysis element can now have a different tooltip for the button.
        * Added tooltips to the model-free model list GUI elements in the model-free analysis frame.
        * Created the gui.wizards package for holding all of the relax wizards.  The gui.wizard module is now called gui.wizards.wiz_objects.
        * Shifted and merged the NOE and Rx peak intensity wizards into a new module.  The wizards were separate and a part of the analysis frame class objects.  The two wizards have been merged into the gui.wizards.peak_intensity.Peak_intensity_wizard class as most of the code is shared.  This one wizard class will be useful for reusing in the relaxation dispersion branch.
        * The peak intensity wizard class now inherits from Wiz_window.  This allows the class to be a wizard window instead of launching a wizard window from within the class.
        * Small rearrangements in the gui.wizards.peak_intensity module.
        * Alphabetical ordering of the methods in the gui.wizards.peak_intensity module.
        * Simplified all of the peak analysis wizard wizard_update_*() methods.  They now all defer to the wizard_update_ids() method which updates the spectrum ID fields.
        * Simplified the wizard_update_noe_spectrum_type() method as in the previous commit.
        * Fixes for the frq.set user function in the GUI.  The ID list is now set to the spectrum IDs, and the frequency units are no longer all fused into one string.
        * Unicode is now used for the tau symbol in the model-free model parameter lists in the GUI.  This is only when modifying the models to optimise, which shouldn't be changed anyway.
        * Removed the 'string' from 'Spectrum ID string' in the spectrum list GUI element.  This is a GUI - the word string is meaningless here!
        * The delay times column string now specifies seconds in the spectrum list GUI element.
        * Formatting improvements for the relaxation data list GUI element.  The data type column entries are now descriptive and use subscript.
        * More unicode strings are used for the GUI for subscripts and Greek letters.
        * Fixes for the R1 and R2 GUI analyses for the recently introduced unicode subscript characters.  There is now self.label for a pure string version and self.gui_label for the fancier unicode version.
        * The frq.set user function 'id' argument is no longer read only - this was causing test suite failures.
        * Removed a nasty kludge for releasing the execution lock on failure.  This kludge, after the bug fix for https://gna.org/bugs/?20756, was causing failures in the test suite.
        * Changed the 'Execute relax' button in all analyses in the GUI to 'Execute analysis'.  It makes no sense to execute relax as relax has been executing during the analysis initialisation and the user setting up all the data for the analysis.  This is a remnant of ancient design of Michael Bieri's GUI being a separate program to relax, which would execute relax with the click of this button.
        * Restored the Py_INCREF() function call in the relaxation curve-fitting C module.  This was deleted at r12632 along with Py_XDECREF() and Py_DECREF() calls.  The absence of a Py_INCREF() function call causes the module to crash the Python interpreter under certain conditions.  The problem was found in the relax_disp branch.
        * Clean up of unused headers and declarations in the exponential curve C module.
        * The relax_fit C module setup() function now uses the Py_RETURN_NONE macro to terminate.  This macro does exactly what the old code does anyway.
        * Removed an unused declaration in the relax_fit C module setup() function.
        * Increased the maximum number of relaxation times for the relax_fit C module to 50.
        * Shifted the C array creation to the relax_fit C module header.  The params, values, sd, relax_times, and scaling_matrix C arrays are now declared and allocated in the header file rather than using malloc() calls in the setup() function.  This is to attempt to remove a memory leak.  The arrays are now of fixed length and reused for each setup() call.  These, as well as the other variables declared in the header, are no longer declared in the functions.
        * Improved the Python and C documentation of the functions of the relax_fit C module.
        * Converted the Py_BuildValue() calls to PyFloat_FromDouble() in the relax_fit C module.  This doesn't change much.
        * Documentation improvements for the back_calc_I() function of the relax_fit C module.
        * The exponential C file now uses the exp() function from math.h rather than Python.h.  This file is independent from Python.
        * The numpy include is no longer used for the compilation of the C modules.  Numpy is not used at all in the C modules, so this just adds an annoying dependency for those who need to compile the module themselves.
        * Removed some bad calls to status.exec_lock.release().  This commit may have to be reverted in the future.  The problem is that the execution lock is not being held when these calls are made.  The calls were added as a kludge to handle certain situations where the execution lock was not released.  There may be cases were this behaviour is still needed.
        * Added a developer script for testing of memory leaks in the relax_fit C modules.
        * Removed the numpy dependence from the manual C module compilation script.
        * Created the lib.mathematics relax library module.  This currently contains two functions, order_of_magnitude() and round_to_next_order().
        * Added unit tests for the lib.mathematics module.
        * The relax_fit analysis now uses lib.mathematics.round_to_next_order() for the scaling matrix.  This allows the optimised I0 value to be better understandable in the printouts.
        * Created the new Value system test class with the first test Value.test_value_copy.  This test demonstrates some pretty large bugs in the value.copy user function.
        * Modified the Value.test_value_copy system test to check the copying of errors as well.
        * Added the error flag argument to all of the specific analysis API set_param_values() methods.  This will allow parameter errors as well as values to be set.
        * The Value.test_value_copy system test now checks all of the values and errors.
        * Added the error flag argument to the value.set user function.  This will allow for parameter errors to be set by the user.
        * The specific analysis API _return_value_general() method now returns errors even when values are missing.
        * The internal structural object PDF file creation now writes out http://www.nmr-relax.com.  Previously the link http://nmr-relax.com was written out.
        * Diffusion tensor PDB file fixes for the internal structural object changes.  This is because the relax website link is now written into the PDB file as http://www.nmr-relax.com rather than http://nmr-relax.com.  This fixes the diffusion tensor system tests.
        * Converted all of the specific analysis modules into packages.  The model-free and steady-state NOE analyses were already packages, and this now brings all other analyses in line with the package design of specific_analyses.  The only change is that the files specific_analyses/x.py have been shifted to specific_analyses/x/__init__.py and the __all__ package variable added.
        * Epydoc docstring fixes for the compat module.
        * The peak intensity wizard can now function remotely when the spins are not named.  This will be needed for the GUI tests to allow the Question() call to be bypassed and still adding the spin.name user function as the first page of the wizard.  The key for spin.name page has also been fixed so that the page can be accessed.
        * The timing of individual tests in the relax test suite can now be printed out.  The new command line argument --time has been added which, when supplied with one of the test suite arguments, will cause the time required to complete each individual test to be displayed.  Instead of just printing the characters '.', 'F', and 'E' for each test, now these characters are postfixed with the time in seconds, the name of the test and ending in a newline character.
        * Big speed up of the test suite by skipping a large number of redundant Frame Order system tests.  These are tests of using only PCS or only RDC data.  These tests are still active for the pseudo-ellipse just to make sure that a whole missing data type can be handled.
        * Suppressed the reporting of skipped tests in the test suite if the module is set to None.
        * The preview button in the file selection elements of the user function windows can now be disabled.  This is via the new wiz_filesel_preview argument being set to False.
        * Merged the frq.set and temperature user functions into the new spectrometer user function class.  The frq.set user function is now called spectrometer.frequency and temperature is now spectrometer.temperature.  To match these changes, the cdp.frq variable is now called cdp.spectrometer_frq.
        * Modified the spectrometer.frequency user function so that a frequency list and count is stored.  These are the new cdp.spectrometer_frq_list and cdp.spectrometer_frq_count variables.  This will allow various parts of relax which assemble frequency information to be simplified and made more consistent.
        * Created basic SVG and PNG graphics for the spectrometer user function class.  The spectrometer is black so as not to offend Bruker, Varian, or Jeol users by avoiding a colour from one of these companies.
        * The pipe_control.spectrometer.get_frequencies() function can now return MHz or Tesla units.
        * Renamed the functions of the pipe_control.spectrometer module.  The frequency() and temperature() functions are now called set_frequency() and set_temperature().
        * Added backwards compatibility support for the spectrometer frequency list and count.  This is needed for old relax state files.
        * A whitelist is now being used to limit the number of frame order GUI tests to 1.
        * Shifted all frequency data handling associated with relaxation data to pipe_control.spectrometer.  This includes the deletion of the relax_data.frq user function as this replicates the behaviour of spectrometer.frequency.  A number of functions from the pipe_control.relax_data module have changed:  frq() has been deleted as it is replaced by pipe_control.spectrometer.set_frequencies(); frq_checks() has been shifted to pipe_control.spectrometer.frequency_checks(); frq_loop() has been shifted to pipe_control.spectrometer.loop_frequencies(); num_frq() has been deleted as the new variable cdp.spectrometer_frq_count contains this info.  Two new functions in the pipe_control.spectrometer module have been added to remove the functionality from pipe_control.relax_data.  These are copy_frequencies() and delete_frequencies().
        * The molmol.macro_run user function file argument now has a description.
        * Huge speed up of the system tests for the loading and creation of model-free saved states.  The OMP files used for the system test have been truncated from 134 to 7 spins, changing the timing of 6 system tests from 11-13 seconds to less than 0.5 seconds each.
        * All of the binary file arguments for the user functions now are file selection GUI elements.  The GUI user function wizard pages now have file selection buttons for selecting the executable to run.  These all have the preview button disabled.  The results.read and state.load GUI elements also have the preview button disabled.
        * The user function 'prompt' description elements as now displayed in the GUI wizard page.
        * The monte_carlo.error_analysis user function can now handle parameters which are lists.
        * Added the ability for specific analyses to override the optimisation constraint algorithm.  The default is still the 'Method of Multipliers', but if the constraint_algorithm() method returns a different string, then that will be used to select the algorithm.  This allows the 'Log Barrier' method in minfx to be used.
        * The value.display and value.write user functions can now handle list and dictionary type parameters.
        * Added two methods to the specific analysis common API class.  These are the _model_type_global() and _model_type_local() methods for always specifying that the model type is global (i.e. at the level of the data pipe) or local (i.e. there can be multiple clusters of models).
        * Added some more functions to the lib.statistics module.  These include the bucket() function for creating a discrete distribution from a list of floating point numbers, and the gaussian() function for calculating the probability of a point on a Gaussian distribution.
        * Added a directory and files for testing the white noise in relaxation data.  This includes scripts and graphs.
        * The initial parameters are now the real parameter rather than the optimised ones.  This is for the script for testing white noise in relaxation data.
        * The spectrum.peak_intensities is now more robust when reading in a generic formatted file.  Firstly there is a check that the intensity column number has been supplied.  And then there is a checks that all relevant data could be extracted from each row of the file.  This replaces traceback errors with RelaxErrors explaining the problem if the user inputs bad data or forgets the intensity column argument.
        * Changed the "Execute analysis" button text back to the original "Execute" text of the old relax GUI.
        * Added the 'test.seq' file from bug report #20873 (http://gna.org/bugs/?20873).  This is from Troels E. Linnet (http://gna.org/users/tlinnet).  The bug report and link to http://thread.gmane.org/gmane.science.nmr.relax.user/1452 explains the contents.  The file will be used to construct a system test to catch the bug.
        * Created the Peak_lists.test_bug_20873_peak_lists system test to catch bug #20873.  This was reported by Troels E. Linnet (http://gna.org/users/tlinnet) at https://gna.org/bugs/?20873.  The test has been created by copying the user function calls from the original bug report and slightly modifying them to suite a 'relax_fit' analysis type.
        * Fix for the Peak_lists.test_bug_20873_peak_lists system test.  The spectrum IDs are now strings.
        * Added checks of the peak intensities to the Peak_lists.test_bug_20873_peak_lists system test.
        * The spectrum.integration_points page in the peak analysis GUI wizard has been fixed.  It is only shown when volume integration is selected with no replicated spectra.
        * Removed a debugging printout which is killing the relax unit tests in Python 3.
        * Added an EPS version of the 128x128 pixel spectrometer icon.  This is for use in the relax manual.
        * Added a README file for the relax 128x128 icons describing how the EPS files should be created.
        * Updated the spectrometer 128x128 icon to be of the correct size and colour.
        * Added a README file to the graphic/analyses directory describing how to create the EPS files.
        * Merger of the dipole_pair and interatomic user function classes.  The functionality of these two classes overlaps significantly.  And the dipole_pair user functions are not related to magnetic dipole-dipole interactions.  Therefore all the user functions from both classes were shifted into the new interatom user function class.  This change will affect almost all relax scripts but, as this will form part of the relax 3 release, script breakage should be expected anyway.
        * Removed the pipe_control.dipole_pair module as its contents is now in pipe_control.interatomic.
        * Removed the dipole_pair module from the pipe_control package __all__ list.
        * Merged the interatom.create user function into interatom.define.  These user functions had overlapping functionality which would be confusing for a user.
        * Added polish to all of the interatom user function docstrings.
        * Improved the functionality of the interatom.read_dist user function.  The file data is now stripped using lib.io.strip to remove comments and blank lines.  And now if the iteratomic data container cannot be found, it is created instead of raising a RelaxError.
        * Improvements to the RelaxZeroVectorWarning - the warning message was terribly out of date.
        * Polish for the rdc.read user function.  Comment lines and blank lines are now removed to suppress useless warning messages about these lines containing no valid data.
        * Added some basic initial relax icons for J couplings.
        * Created some basic initial GUI wizard graphics for J couplings.
        * Modified the titles of all the auto-analysis GUI elements.  The text 'Setup for' has been removed as it is meaningless.
        * Added more emphasis on the titles of the auto-analysis GUI elements.  There is now more space below the title, and a different font (16pt roman italic) is being used.
        * Removed some now irrelevant information from the rdc.read user function docstring.
        * Removed a false prompt example from the rdc.read user function docstring.
        * Created an entire new user function class for handling J couplings in the relax data store.  This derives from the RDC user function modules.  The following functions have been created:  j_coupling.copy, j_coupling.delete, j_coupling.display, j_coupling.read, and j_coupling.write.
        * Added a check for the RDC data type to the rdc.read user function.
        * The rdc.read user function can now handle T = J+D type data.  Support for this in the specific analyses is yet to be added.
        * Fixed for the rdc.read, j_coupling.read and interatomic.read_dist user functions.  Comment lines are no longer removed, as it is impossible to tell a comment line from a spin ID string.
        * Split up the specific_analyses.n_state_model package into modules.  The new data and parameter modules have been created by shifting out method from the __init__ module and converting them into functions of the two new modules.  This is to simplify the package.
        * Shifted another method from the N_state_model class to the specific_analyses.n_state_model.data module.
        * Added support for the T = J+D RDC data type to the N-state model target function.  The J couplings are sent into the target function class when the 'T' RDC data type is encountered.  These measured values are then added to the back-calculated RDC values to produced T(theta) which is then compared to T via the chi-squared function.
        * Fix for the new specific_analyses.n_state_model.data.opt_uses_j_couplings() function.  The cdp.rdc_data_types appears not to have all alignments IDs within it.
        * Removed the check for Numeric Python in the dep_check module.  This Python module not been used within relax for the better part of a decade.  This check is not needed.
        * Added the j_coupling module to the pipe_control __all__ list.
        * Fix for the pipe_control.rdc.q_factors() for T = J+D type data.  The Q factor normalisation was incorrect, as the J coupling should be subtracted from T first.
        * Unit test fixes for the N-state model.  This is needed due to the recent package rearrangements.
        * Removed the absolute argument for all of the lib.alignment.rdc functions.  This should be performed at the level of the target function, as mathematical operations may be required prior to taking the absolute value.
        * Fixes for the N-state model target functions for the lib.alignment.rdc changes.  The absolute value is now calculated within the target function rather than when back calculating the RDCs.
        * Errors are now handled correctly for the N-state model when T = J+D values are used for the RDCs.  The error is the square root of the average variance of the RDC error and J coupling error.
        * The RDC back-calculation function now supports T = J+D values.
        * Created the N_state_model.test_absolute_T system test.  This is for checking the optimisation of absolute T=J+D values to find alignment tensors.
        * Epydoc docstring fix for the RelaxTestResult.write_time() method.
        * Created a script to look through the entire relax source tree for unused imports.
        * Removed a large amount of unused imports throughout the relax code base.  These were identified by the new ./devel_scripts/find_unused_imports.py script together with pylint.
        * Fixes for the pipe_control.rdc module for when the structure cdp.rdc_data_types is missing.
        * Improvements to the devel_scripts/find_unused_imports.py script.
        * More cleanups of unused imports throughout relax.
        * Fixes for how the devel_scripts/find_unused_imports.py script runs pylint.
        * More cleanups of unused imports throughout relax.
        * Fixes and expansion of the test_suite.unit_tests._lib package __all__ list.
        * Fixes and improvements to Gary Thompson's unit_test_runner.py script.  The printouts have been improved and the script can now handle more than 3 levels of directories for a package.
        * The unit_test_runner.py script now defaults to verbose mode.
        * More cleanups of the unit_test_runner.py script.
        * Added a printout to the unit_test_runner.py if the TestCase class cannot be found.  This normally continued the test loading silently without warning that the TestCase class name is missing or incorrect.
        * Missing import in the unit test module for the lib.frame_order.matrix_ops module.
        * Shifted the spin_id_to_data_list() function from pipe_control.selection to lib.selection.  This is because the selection object requires this function, and the function has nothing to do with the relax data store.
        * Lots of import cleanups including removal of '*' imports, missing imports, and unused imports.
        * Small change to the find_unused_imports.py printouts.
        * Large removal of unused imports throughout relax found using the devel_scripts/find_unused_imports.py script.
        * Clean up of all the imports in the relax code base.  This is mainly alphabetical reordering of the imports required due to the huge layout changes in the trunk.
        * Shifted the user function initalisation.  This is from the import of the user_functions package to the package initialise() function.  This is for saner importing dependencies in the relax sources.
        * The lib.io.open_write_file() function now catches file names of None and raises a RelaxError.  This is useful for the GUI if the user forgets to select a file name.
        * The rdc.corr_plot user function can now handled T=J+D type data.
        * The N-state model analysis can now handle RDC data of mixed D and T=J+D.
        * Added support for mixed RDC data types per alignment.  This is to allow, for example, one bond RDC values of the 'D' data type and two bond RDC values of the T = J+D data type to be loaded for the same alignment ID.  This is now handled in the N-state or ensemble analysis by handling a different RDC data type per RDC value.
        * The Peak_lists.test_bug_20873_peak_lists system test is now skipped if the C modules are not compiled.  This test requires the presence of the C modules.
        * Added a completely empty PNG image to use in the new analysis GUI wizard for blank buttons.  This will be used in the relax_disp branch to eliminate a Mac OS X only bug.
        * Added the scripts for backing up the relax SVN repository and mailing lists to the repository.  This is to make it easier for others to set up the backups on their systems.
        * Added comments to the backup scripts to make it easier to use them.
        * Added the listings package to the relax user manual LaTeX file.  This will be used to improve the formatting and look of relax scripts in the manual.
        * Started to convert the relax user manual to use the lstlisting environment for scripts.  This is to prettify the scripts in the manual.
        * Improvements to the script UI section of the NOE chapter of the user manual.  The lstlisting environments now have the correct numbering to match the script at the start,comments have been copied into the split up script elements, and a few comments improved.
        * The NMRPipe script in the relaxation curve-fitting chapter of the manual now uses lstlisting.  The language has been explicitly set to csh to override the global default of Python.
        * Converted all of the relaxation curve-fitting chapter of the user manual to the lstlisting environment.  This is for all parts of the script UI section of the chapter.
        * Converted all of the model-free chapter of the user manual to the lstlisting environment.  This is for all parts of the script UI section of the chapter.
        * Converted all of the J(w) mapping chapter of the user manual to the lstlisting environment.  This is for all parts of the script UI section of the chapter.
        * Converted all of the Consistency testing chapter of the user manual to the lstlisting environment.  This is for all parts of the script UI section of the chapter.
        * Created a new listings language definition for relax for the user manual.  This is for better highlighting of relax scripts and code in the relax manual.
        * Added an EPS version of the 128x128 J coupling icon for use in the relax user manual.
        * Removed some junk text from the relax script text in section 6.3.8 of the user manual.
        * The relax language definition is now auto-generated by the fetch_docstrings.py script.  This is for use in the relax user manual using the listings package.  The fetch_docstrings.py script now creates the docs/latex/script_definition.tex file.  This is used by the relax.tex file via an \include{} statement.  This setup allows all of the relax user functions to be dynamically set as keywords for the relax language definition.
        * Converted all of the Development chapter of the user manual to use the listing package.  This is for all of the code examples, which are now much more colourful.
        * Small typo fix for the relaxation curve-fitting chapter of the user manual.
        * Fixed some out of date script code for the relaxation curve-fitting chapter of the user manual.
        * Added a section label to the relaxation curve-fitting chapter of the user manual.
        * Adding a test data file in NMRPipe SeriesTab format.  Progress sr #3043: (https://gna.org/support/?3043) - Support for NMRPipe seriesTab format *.ser.  A file in NMRPipe SeriesTab format is added to the test-suite for further development.
        * Test function for NMRPipe SeriesTab format implemented.  Progress sr #3043: (https://gna.org/support/?3043) - Support for NMRPipe seriesTab format *.ser.  An assertEqual test is implemented for the reading of NMRPipe SeriesTab format.  The standalone call is: relax -s Peak_lists.test_read_peak_list_NMRPipe_seriesTab.
        * Adding a NMRPipe function file in the folder lib\software\nmrpipe.py.  Progress sr #3043: (https://gna.org/support/?3043) - Support for NMRPipe seriesTab format *.ser.  Initial file for: lib\software\nmrpipe.py.  This file will hold the function calls handling NMRPipe SeriesTab format.
        * Fix for commit (http://article.gmane.org/gmane.science.nmr.relax.scm/18004).  The spin naming was wrong.  Progress sr #3043: (https://gna.org/support/?3043) - Support for NMRPipe seriesTab format *.ser.  'spin_id' keywords should be supplied different.  Ex: spin.name(name='NE1', spin_id=':62').
        * Autodetect format implemented for NMRPipe SeriesTab format implemented.  Progress sr #3043: (https://gna.org/support/?3043) - Support for NMRPipe seriesTab format *.ser.  The file is determined a NMRPipe SeriesTab if the first two words of the first line is: REMARK SeriesTab.
        * Update of the rotation matrix example in the intro chapter of the user manual.  The function is now in lib.geometry.rotations.euler_to_R_zyz().  The example has also been converted to the lstlisting environment for better formatting.
        * The relax prompt strings and help system are now keywords for the relax listings package definition.  The prompt strings "relax>" and "relax|" are now recognised as keywords and are coloured blue.  The help system has been added as a normal Python keyword for highlighting.
        * Converted all relax prompt examples in the intro chapter of the manual to the lstlisting environment.  This is simply for a more colourful representation.
        * The prompt examples in the user function chapter of the manual now use the listing environment.  This is via the fetch_docstrings.py script and results in much better formatting of these subsections.
        * Added function destination for auto-detected NMRPipe SeriesTab format.  Progress sr #3043: (https://gna.org/support/?3043) - Support for NMRPipe seriesTab format *.ser.  Auto-detected NMRPipe SeriesTab format make function calls to the file: lib\software\nmrpipe.py in function nmrpipe.read_list_intensity_seriestab().
        * Imported the missing lib.software.nmrpipe module into pipe_control.spectrum.  Progress sr #3043: (https://gna.org/support/?3043) - Support for NMRPipe seriesTab format *.ser.  Expected modules for use in lib\software\nmrpipe.py is imported.
        * Release checklist minfx and bmrblib version update to the newest versions.
        * Spacing fix in an import statement (found using the 2to3 conversion program).
        * Added the relax wiki backup script for dumping the MySQL database contents locally.  This is from http://article.gmane.org/gmane.science.nmr.relax.devel/4163.
        * Added the script from Troels Linnet for backing up the relax wiki via FTP.  This is from the post http://article.gmane.org/gmane.science.nmr.relax.devel/4168.
        * Added a link to Troels' post to the relax-devel mailing list to the relax wiki FTP backup script.  The link is http://article.gmane.org/gmane.science.nmr.relax.devel/4168
        * The relax info printout now works in the absence of the bmrblib module.
        * Added some Oxygen icons for a boolean GUI input element.  The media-record-relax-green.png files are the media-record.png files with the hue set to 117.
        * Created a boolean input element for the auto-analyses of the GUI.  This simply turns on and off.
        * The boolean GUI auto-analysis input element now has a SetValue() method.
        * Completed NMRPipe SeriesTab reader.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.  Completed NMRPipe SeriesTab reader for assignment according to SPARKY format.  Changes implemented according to: http://article.gmane.org/gmane.science.nmr.relax.devel/4120.
        * Extraction of NMRPipe SeriesTab changed.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.  The Extraction of NMRPipe SeriesTab data is changed in pipe_control/spectrum.py in the read() function.
        * Added flag for single or multiple extraction of spectrum.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Flag change added to reading of NMRPipe SeriesTab.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Some small edits to the intro chapter of the relax user manual.
        * Many improvements to the indexing in the relax user manual.
        * Removed the flag for single_spectrum.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Fixed wrong reference to Sparky format.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Modfied the intensity list to handle intensities for all spectra per spin.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Fixed the extraction of NMRPipe seriestab data in pipe_control.spectrum.read().  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Fix for handling reading spin of type heteronuc='NE1' and proton='HE1'.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Adding NMR seriesTab data file for a multiple column / multiple spectrum formatted file.  This file is from https://gna.org/support/download.php?file_id=18618 attached to the support request https://gna.org/support/?3043 by Troels Linnet.  This is if the command "seriesTab -in ../../peaks.dat -out seriesTab_multi.ser -list nmrfiles.list -sum -dx 1 -dy 1" where nmrfiles.list contains file reference to 10 .ft2 files.
        * Fix for unit test of nmrpipe.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Replacing a pointer-reference structure to an empty creation of list of lists.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * The ID of spins in seriesTab_multi.ser was not formatted correctly to SPARKY format.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Added system test for reading of a multi column formatted NMRPipe seriesTab file.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.  Generated the reference data in Excel, for the system test.  The spectrum ID's are auto generated by supplying the keyword spectrum_id='auto'.  The first few tests was matched against integers rather than floats.  Adding '.0' to the end of each number.  Spaces added after the commas in the self.assertAlmostEqual() calls.  The 2to3 conversion program (for Python 2 to Python 3 conversion) highlights this issue.
        * Added check for number of supplied spectra ID's and the number of returned intensity columns.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Made it possible to autogenerate spectrum ID's, if spectrum_id='auto'.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Remove from datalist where empty list starts.  These are created where spins are skipped for ID = '?-?'.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Moved checks for matching length of spectrum IDs and intensities columns.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Moved the adding function of adding the spectrum id (and ncproc) to the relax data store.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.  Shifting it to later will prevent the cdp.spectrum_ids list to be populated after the user calls the user function incorrectly.
        * Added epydoc documentation in pipe_controlspectrum.read() when supplying keyword 'auto'.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Added GUI description for when supplying 'auto' to the spectrum_id.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Added a stub GUI describtion in the File formats, for NMRPipe seriesTab.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.
        * Fix for two spaces are used after a period in documentation.  Progress sr #3043: (https://gna.org/support/?3043) - support for NMRPipe seriesTab format *.ser.  relax uses the double space for easier for the eyes to pick up the sentence structure.
        * The relax user manual is now broken into parts.  The higher level LaTeX part command is now used to group related chapters.  This should make it easier for users to navigate this huge thing.
        * Creation of the optimisation chapter of the relax user manual.  The main text of this chapter originates as part of the model-free chapter.  As this most of this text was not model-free specific, it has been spun out as its own chapter.  Text has also been taken from the "Optimisation of relaxation data – values, gradients, and Hessians" chapter.  The indexing for the optimisation topics has also been improved.
        * Changed the chapter layout of the relax user manual.  The development chapter has been moved forwards.
        * Fix for the spectrum.read_intensities user function docstring.  Grammatically, the text "spectrum ID's" should be "spectrum IDs".  The problem though was that this text was strangely causing the user manual compilation to fail.
        * Added subsubindexing for the optimisation algorithm index entries.
        * Added extensive cross-referencing to the index of the relax user manual.
        * Added some hyphenation rules for better formatting in the user manual.  For this, the external hyphenation.tex has been created.
        * Better indexing in the relax user manual.  The imakeidx LaTeX package is now used instead of makeidx, and the hyphenation has been improved.
        * Lots of spelling fixes for the relax user manual.
        * Updated the minimum Python version from 2.3 to 2.5 in the user manual.
        * Epydoc docstring fix for the pipe_control.spectrum.read() function.  The text "Z_A{i}" causes problems when compiling the API documentation, so it has been changed to "Z_Ai".
        * Python 3 fix for the new test_suite.clean_up module.  The exceptions Python module does not exist in Python 3, so instead the relax compat.builtins object is being used to store the WindowsError variable of None.
        * Added a paragraph to the installation chapter of the manual about not supporting the EPD.


    Bugfixes:
        * Fix for bug #20674 (https://gna.org/bugs/?20674) - the failure of the consistency testing analysis.  This was reported by Mengjun Xue <mengjun dott xue att mailbox dott tu-berlin dot de>.  The problem was that the first residue did not have a single proton 'H' in the PDB file, and therefore the dipolar relaxation interaction was not set up.  The overfit_deselect() method of the consistency testing specific API was not checking for this.  The method is now much more like that of the model-free specific analysis.
        * Fix for the model-free analysis specific overfit_deselect() method.  The tests for the presence of dipolar relaxation was not correct and was non-functional.
        * Fix for the J(w) mapping analysis matching that for the consistency testing.  The overfit_deselect() method is now identical to that of the consistency testing analysis.
        * Fix for bug #20683 (https://gna.org/bugs/?20683) - the infinite and NaN data in Bruker DC files.  This was reported by Mengjun Xue <mengjun dott xue att mailbox dott tu-berlin dot de>.  The model-free specific overfit_deselect() method now checks for infinite relaxation data and deselects the spin if such data is encountered.
        * Fix for the analysis specific API common method _data_init_spin().  The data types are now correctly checked - they are not strings but types.
        * Fix for the relaxation curve-fitting _assemble_scaling_matrix() method.  The intensity scaling was never activated before due to a lower vs. uppercase parameter name mismatch.  This scaling is now correctly set up as the previous code assumed cdp.relax_times was a list whereas it has been a dictionary since the early 1.3 releases.
        * The grid search bounds for the relaxation curve-fitting are no longer affected by scaling.  The parameter scaling recently activated revealed a bug in the lower and upper data structures for the grid search in that these were continuously scaled down.
        * Fix for the target_functions.relax_fit C module - the scaling was incorrectly performed.
        * Fix for the relaxation curve-fitting _back_calc() method for the changes to the C module.  The setup() method requires that the scaling matrix is converted to a list of the diagonal elements.
        * Fix for the analysis specific API common _return_value_general() method.  The value of None is now handled properly when a simulation value is asked for.
        * Restored the default behaviour of the spin_loop().  The skip_desel flag is now functional and defaults to False.
        * Fix for the relax_times and intensities parameter definitions for specific_analyses.relax_fit.  These are dictionaries, not lists.
        * Fix for the spectrum.error_analysis user function for replicated spectra and subsets.  A second call to spectrum.error_analysis was removing the results from the first call.  This is now avoided.
        * Bug fix for the right click popup menu in the spectra list GUI element.  This affects the NOE, R1, and R2 analyses.  The actions of the menu items were all mixed up.
        * Fix for the nasty bug #20756 (https://gna.org/bugs/?20756).  The problem was that the global execution lock was not always released by a relax script when certain errors are raised during the script execution.  This does not occur for all types of error though.  Now the release of the lock has been shifted into the 'finally' statement to absolutely force lock release.
        * Big bug fix for a memory leak in the relaxation curve-fitting C module.  Proper reference counting is used for the temporary 'element' Python objects used in the conversion between Python and C objects.  The use of the Py_CLEAR() macro removes the memory leak.  However the number of references as seen by sys.gettotalrefcount() in a debugging Python version keeps rising and might be a problem in the future.
        * Big bug fix for the value.copy user function - it is now functional again.
        * Bug fix for the value.copy user function.  The user function can now handle parameter errors, and the values are set in the correct data pipe.
        * Bug fix for an incorrect print statement in the N_state_model.test_paramag_centre_fit system test.  This is in the script, and was uncovered using WinPython by Troels E. Linnet (http://gna.org/users/tlinnet) via the relax system tests at http://thread.gmane.org/gmane.science.nmr.relax.devel/3863.  The Python bug was detailed at http://thread.gmane.org/gmane.science.nmr.relax.devel/3863/focus=3867.
        * Fix for the package checking as part of the unit tests.  This was identified from the bug report #20820 (https://gna.org/bugs/?20820) submitted by Troels E.  Linnet (https://gna.org/users/tlinnet).  The problem was that on some systems, the full path is required for checking the presence of the directories which are the sub-packages of the main package being checked.  The result was that checking for the package in the __all__ list was skipped.  Note that this change does not fix the bug reported.
        * Fixes for the Jw.test_calc system test - the spectral density value comparison is now significant.
        * Bug fix for the pipe_control.spectrometer.get_frequencies() function.  The units argument was incorrectly referenced.
        * Fix for bug #20820 (https://gna.org/bugs/?20820).  Solution found - 'software' was not mentioned in __init__.py, and failed at import.
        * Partial fix for bug #20873 (https://gna.org/bugs/?20873).  The spectrum_id argument for the spectrum.read_intensities user function can now be both a string and a list of strings.
        * Fix for bug #20873 (http://gna.org/bugs/?20873).  This was reported by Troels E. Linnet (http://gna.org/users/tlinnet).  The ability to load multiple peak intensities from a single generic formatted file has been correctly implemented.  This involves added checks to make sure that the user supplies reasonable arguments and to then loop over the intensity column argument.
        * Python 3 fixes via the 2to3 program.
        * Bug fix for the value.write user function for list or dictionary type data.  This is for the case where the variable of one spin is set to None rather than a list or dictionary type.
        * Bug fix for the Sequence GUI input element.  This complete the removal of bug #20873 (https://gna.org/bugs/?20873).  The problem was that the gui_to_str() function was not failing to convert the string into a string list, so the list was deemed as a single string.  Now the first character of '[' or '(' for lists or tuples are now searched for instead of relying on the conversion to trigger an error.
        * Fixes for the value.write user function for simple parameter values of None.  This is a recently introduced bug which causes a complete failure of the user function is the parameter for any spin is None.
        * Fix for bug #20888 (https://gna.org/bugs/?20888), the autoscaling of Grace graphs.  This solution was mentioned in the post at http://thread.gmane.org/gmane.science.nmr.relax.devel/3920/focus=3930.  Instead of using minimum and maximum values for the axes in the Grace graphs produced by the lib.software.grace module, which was the old solution for having the graphs scaled to reasonable values, instead the '@autoscale' command is appended to the end of all graphs.  This is performed by the write_xy_data() function.
        * Bug fix for the running of the test suite in the relax GUI.  The fix of r19727 was extended to apply to the GUI as well.  Too many arguments were being sent into TextTestRunner Python class on certain Python versions (3.1 and <= 2.6).
        * Big bug fix - the relax execution lock now truly supports nesting.  This fixes bug #20891 (https://gna.org/bugs/?20891) reported by Troels Linnet (https://gna.org/users/tlinnet).  Scripts can now be executed from the GUI.  Note that this is a very dangerous fix.
        * Completed the fix for bug #20889 (https://gna.org/bugs/?20889).  The problem was that the spectrum.read_intensities user function was incorrectly updating the cdp.spectrum_ids list when the spectrum_id argument is set to a list.  The list of IDs was being set as a single element of cdp.spectrum_ids, causing problems with the GUI when updating the ComboBox choices and then subsequent setting of the spectrum IDs.  This bug and fix is independent of the relax_disp branch, despite being uncovered there and being caught by the Relax_disp.test_bug_20889_multi_col_peak_list GUI test in that branch.
        * Bug fix for the GUI element for the interatom.define user function.  The special spin ID GUI elements can not be set to the get_spin_ids() function as then SetValue can no longer work for IDs not in the list.
        * Fixes for the TestCase class names for a number of lib package modules.  As the test class name was incorrect, previously the test suite was skipping these silently.  This was dangerous.
        * Fixes for the unit tests of the lib.selection module.  The contains_*() methods now should be used.  And the test_Selection_ful_spin_id() unit test has been completely deleted as this way of checking the selection object is no longer valid.
        * Fix for bug #20910 (https://gna.org/bugs/?20910) - the broken grace.write GUI interface.  The problem was that the Value GUI input element was not detecting list-type data returned by the wiz_combo_iter method.
        * Fix for bug #20915, (https://gna.org/bugs/?20915) - Failure of Grace opening in MS Windows Troels E. Linnet provided this patch, and was discovered during work on a Windows 7 system: telinnet aaattt bio_dot_ku_dot_dk.  This is a small fix for a wrong call to "raise RelaxMissingBinaryError(binary)", when issuing an external call to xmgrace.  The "path_sep" would be equal = [\/], and the RE search would not find(True) the full path specified for the xmgrace file.  This is now shifted to python: os.path.isfile http://docs.python.org/2/library/os.path.html.  Another fix, is that as a standard the command "xmgrace" is provided.  This will work fine through windows cmd, but the true name for program in windows is "xmgrace.exe", and so an additional search for +".exe" is also performed.
        * Fix for the N_state_model.test_absolute_T system test for Mac OS X.  The precision of the check needed to be decreased.
        * Fix for bug #20918 (https://gna.org/bugs/?20918), the hanging of the data pipe editor.  This was reported by Troels Linnet (https://gna.org/users/tlinnet) and is an MS Windows only problem.  The problem is in the wxMSW part of wxPython, and it may be fixed in newer wxPython versions.  The issue is nevertheless now avoided by calling the GUI user function store objects with the arguments wx_wizard_sync=True and wx_wizard_modal=True.  This appears to solve the problem.
        * Decreased the precision of the check in the Frame_order.test_rigid_data_to_rigid_model system test.  This is to allow the test to pass on a MS Windows 7 test machine.
        * More MS Windows fixes, this time a nasty kludge, for the relax system tests.  This is strangely needed for the relax_disp branch and not the trunk for a 64-bit MS Windows 7 test system.  The reason why this WindowsError is triggered by the base tearDown() method in the relax_disp branch and not trunk is a total mystery.  Actually why Windows refuses to complete the file close() operations of the results.write and state.save user functions before calling the tearDown() method is the greater mystery.
        * Bug fix for the batch file permissions for executing Art Palmer's Modelfree4 program.  This was identified in the post http://thread.gmane.org/gmane.science.nmr.relax.devel/3953/focus=4000.  The file was set to be executable, but on Unix systems it would end up with the permissions "---x------".
        * Small comment fix in the sample_scripts/consistency_tests.py script.
        * Fix for the scons fetch_docstrings target.  The user functions need to be explicitly initialised in the fetch_docstrings script as this is not running through relax.
        * Fix for bug #20921 (https://gna.org/bugs/?20921), the GUI tests freezing in MS Windows.  The problem was that the dipolar interaction wizard in the model-free auto-analysis GUI element was calling its user functions asynchronously.  This can lead to racing conditions.  The commit r80084 (http://article.gmane.org/gmane.science.nmr.relax.scm/17840) somehow randomly triggers this racing on MS Windows systems only together with the Mf.test_mf_auto_analysis GUI test.  Now all user functions are called synchronously.
        * Fix for the relax GUI splash screen.  On certain systems, the GUI was failing due to the splash screen.  It is now shown after the main wxPython window has been created.
        * Fix for the new analysis wizard when running the GUI tests.  If the create_button() method is called without a function argument, the wizard is still created.  This is triggered in the relax_disp branch on certain systems.
        * Bug fix for the spin parameter array always being converted to lowercase.  The is in the data_store.mol_res_spin.SpinContainer._back_compat_hook() method.  It always calls the _back_compat_hook_mf_data() method which converts the spin 'params' list all to lowercase.  Now the _back_compat_hook() method first checks that the data pipe is that of a model-free analysis.
        * Proper bug fix for the spin parameter array always being converted to lowercase.  The previous fix was causing failures in certain cases.  One system test and one GUI test were failing.  Now the spin container is checked for the presence 'equation' variable to determine if this is a model free data pipe.
        * Fix for the relax version file for the relax user manual construction.  This was causing 'scons user_manual_pdf' and related targets to fail when a local git repository is used (via git-svn).
        * Bug fix for the page numbers in the index - these were often out by a few pages.  The makeindex command was being run too early in the repetitive LaTeX compilation chain, causing the page numbers to be incorrect.  It is now run twice to fix the problem.
        * Fix for the spectrum.read_intensities user function in the GUI.  The menu string was truncated to spectrum.read.
        * Python 3 fix for the lib.software.nmrpipe.read_list_intensity_seriestab() function.  The inbuilt Python filter() function does not return a list in Python 3, as previously, but rather a filter object.  Therefore a call to list() is required to properly convert the data.
        * An attempt at better handling MS Windows not releasing the file handle on time in the test suite.  The system and unit tests tearDown() method should now be resilient to the strange MS Windows behaviour of not releasing the relax state files.  The tearDown() method should now complete even when this error occurs.  A delay of 3 seconds has been added when the WindowsError occurs to give the OS some time before attempting to delete the file again.  If this fails, then the file deletion operation is skipped.
        * Better handling of temporary file and directory removal in the relax test suite.  The new test_suite.clean_up.deletion() function has been created from the recent method of the same name.  This is used by the tearDown() method of the system, unit, and GUI tests.  It should prevent rare MS Windows errors from appearing due to the OS not releasing a temporary file after a close() call.



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 workarounds 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/?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/?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 tryptophan 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/?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/?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 dauvergne_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 bmrb 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.
        * Pseudo 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)
