Difference between revisions of "Relax 3.3.1"
(Fix for a link inside a link.) |
(Links to the HTML manual.) |
||
Line 43: | Line 43: | ||
<section begin=changes/> | <section begin=changes/> | ||
* Epydoc docstring fix for the [http://www.nmr-relax.com/api/3.3/dep_check-module.html#version_comparison dep_check.version_comparison() function]. | * Epydoc docstring fix for the [http://www.nmr-relax.com/api/3.3/dep_check-module.html#version_comparison 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. | + | * Removed ZZ and HD exchange from the [http://www.nmr-relax.com/manual/Relaxation_dispersion.html 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 [http://wiki.nmr-relax.com relax wiki], and then how that text and the CHANGES file are used for the [http://news.gmane.org/gmane.science.nmr.relax.announce email announcement] and the [https://gna.org/news/?group=relax Gna! news item]. | * Updated the 'Announcement' section of the release checklist document. This now includes details about initially composing the message using the [http://wiki.nmr-relax.com relax wiki], and then how that text and the CHANGES file are used for the [http://news.gmane.org/gmane.science.nmr.relax.announce email announcement] and the [https://gna.org/news/?group=relax Gna! news item]. | ||
* Small changes for the Gna! news item in the release checklist document. | * Small changes for the Gna! news item in the release checklist document. |
Revision as of 14:17, 9 October 2014
Contents
Description
This is a minor feature and bugfix release. It includes the addition of the error_analysis.covariance_matrix, structure.align, and structure.mean user functions and expanded functionality for the structure.com and structure.delete user functions. Many operations involving the internal structural object are now orders of magnitude faster, with the interatom.define user function showing the greatest speed ups. There are also improvements for helping to upgrade relax scripts to newer relax versions. The numdifftools package is now bundled with relax for allowing numerical gradient, Hessian and Jacobian matrices to be calculated. And the release includes the start of a new protocol for iteratively analysing repetitive relaxation dispersion experiments.
Download
The new relax versions can be downloaded from http://www.nmr-relax.com/download.html. If binary distributions are not yet available for your platform and you manage to compile the binary modules, please consider contributing these to the relax project (described in section 3.6 of the relax manual, http://www.nmr-relax.com/manual/relax_distribution_archives.html).
CHANGES file
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 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, and then how that text and the CHANGES file are used for the email announcement and the Gna! news item.
- 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 system test 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 system tests.
- Further extended the protocol for repeated dispersion analysis. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Extended the system test for the protocol for repeated dispersion analysis. Task #7826: Write a 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.
- 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: 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. 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: 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: 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: 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: 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. 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: 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: 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 relax 1.3.4 versions.
- Added the relax 1.3.0 to relax 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 relax 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: 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: Write a Python class for the repeated analysis of dispersion data.
- Fix for calling correct folder with test intensities. Task #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: 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: Write a Python class for the repeated analysis of dispersion data.
- Added the Gimp XCF file for the logo of the relax wiki.
- 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: Write a Python class for the repeated analysis of dispersion data.
- Implemented a correlation plot for Reff2 values to be plotted for different pipes. This has the Reff2/σReff2 plotted, which is the best way to represent this data. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Further improved the plotting of data in repeated analysis. Task #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: Write a Python class for the repeated analysis of dispersion data.
- More adding of matplotlib snippets for plotting intermediate data. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Changing the range of plotting for statistics. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- More changes to plotting for statistics. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Fix for axis limits when plotting stats. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Fix for globing, to prevent incidentally taking wrong intensity file. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Correction to figure limits. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Implemented writing out of statistics to file. Task #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: 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: 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: Write a Python class for the repeated analysis of dispersion data.
- Better check for math domain error in intensity proportionality. Task #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: Write a Python class for the repeated analysis of dispersion data.
- Small fix for correct check of missing of data. Task #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: 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: Write a Python class for the repeated analysis of dispersion data.
- Fix for the testing of method is finished when called. Task #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: 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: 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. The 1.0.10 version is also useful as there is full support for gradients and Hessians in the log-barrier constraint algorithm.
- 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: 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: 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, 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 thepipe_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: 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, 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: 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: 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 kAB is between 0-100. The parameter is only used in the TSMFK01 model. The kAB 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 kAB 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: Write a Python class for the repeated analysis of dispersion data.
- Modified the grid search limits for parameter kAB 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: 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() function 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 Reff2 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: Write a Python class for the repeated analysis of dispersion data.
- Implemented statistics for Reff2 values. Task #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: Write a Python class for the repeated analysis of dispersion data.
- Implemented writing out of intensity statistics. Task #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: 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: 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: Make it possible to submit CPMG experiments for BMRB.
- Implemented the initial part of the API, to collect data for BMRB submission. 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: 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: Make it possible to submit CPMG experiments for BMRB.
- Removed the showing of Matplotlib figures in the test suite. Task #7826: Write a Python class for the repeated analysis of dispersion data.
- Implemented system test Relax_disp.test_dx_map_clustered to cath the missing creation of a point file. Bug #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 χ2 value. Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Made initial preparation to loop over clustered spins and IDs for the minimise.calculate user function call. Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Implemented looping over spin-clusters when issuing a minimise.calculate(). Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Made back_calc_r2eff() in optimisation module use the spin and ID list instead. Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Fix for graph plotting functionality to send spins as list of one spins. Bug #22754: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Inserted last test in test_dx_map_clustered, to check out the written χ2 values are as expected. Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Moved the looping over cluster spin IDs into its own function in the API. Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Added the selection string for all the cluster IDs to be parsed back as well. Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Made the value set function, set values to all spins, if it is a global parameter. Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Moved the skipping of protons away from looping function. Bug #22754: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Removed then function loop_cluster_ids() from dispersion API(). This should be implemented elsewhere. Bug #22754: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Fix for references to "spin" in optimisation.back_calc_r2eff(). Bug #22754: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Fix for looping performed twice in relax_disp API model_loop(). Bug #22754: The minimise.calculate user function does not calculate χ2 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: The minimise.calculate user function does not calculate χ2 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, 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: The minimise.calculate user function does not calculate χ2 value for clustered residues.
- Added some test PyMOL scripts to create OpenDX maps and χ2 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 χ2 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, 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, 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, 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, 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: dx.map does not work when only 1 point is used.
- Fix for bug #22563, 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 kAB not belonging to list of global parameters. kAB 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: The minimise.calculate user function does not calculate χ2 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 kAB 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.
Links
For reference, the following links are also part of the announcement for this release:
Announcements
If you would like to receive announcements about new relax versions, please subscribe to the relax announcement mailing list. This list only receives ~10 emails per year. It is archived at the SourceForge archives and in The Mail Archive.
See also
- The combined release notes for all relax versions (warning, this is very large).
- The combined release descriptions for all relax versions.
- The combined release metadata for all relax versions.
- The combined release features for all relax versions.
- The combined release changes for all relax versions (warning, this is very large).
- The combined release bugfixes for all relax versions.
- The combined release announcement links for all relax versions.