relax Changelog

What's new in relax 4.1.1

Mar 25, 2019
  • Mac OS X distribution file: Fixes for the DMG file generation. The .git directories are no longer bundled (the check in setup.py was for .svn directories), and the sobol_test.py script contained a bug that blocked the image generation.
  • Changes:
  • Release Checklist: Rewrite for the shift to a git repository and to the SourceForge infrastructure.
  • Test suite: Temporary file fix for the Bmrb system and GUI tests. The temporary files normally used by these tests were accidentally removed in a previous commit. The result was temporary files being placed in the current directory.
  • log_converter.py development script: Conversion from SVN to git. A number of spacing bugs have also been removed, simplifying the release process.
  • relax manual: The find_replicate_titles.py script can now handle the presence of latex2html. If latex2html had been set up via the docs/devel/latex2html/setup script, then find_replicate_titles.py would fail due to the presence of *.tex files outside of docs/latex/.
  • Update from LaTeX2HTML 2008 to 2019. The instructions now point to the latex2html repository fork at SourceForge, with the relax manual specific branches.
  • GUI tests: Addition of the User_functions.test_bug_2_structure_read_pdb_failure test. This is to catch bug #2, the failure of the structure.read_pdb user function in the GUI.
  • GUI tests: Addition of the User_functions.test_bug_3_no_argument_validation test. This is to catch bug #3, the absence of user function argument validation within the GUI.
  • Unit tests: Addition of two tests for specific_analyses.relax_disp.parameters.param_num(). This is to catch bug #6, the failure of the parameter counting for the 3-site relaxation dispersion models when spins are clustered. The two unit tests are Test_parameters.test_param_num_clustered_spins and Test_parameters.test_param_num_single_spin in the unit test module _specific_analyses._relax_disp.test_parameters.
  • Unit tests: Addition of two tests for specific_analyses.relax_disp.parameters.loop_parameters(). The two unit tests are Test_parameters.test_loop_parameters_clustered_spins and Test_parameters.test_loop_parameters_single_spin in the unit test module _specific_analyses._relax_disp.test_parameters. These were added to try to catch the typo error at the end of the function, where the ΔωHAB parameter appears twice (the second should be ΔωHAC). However the typo was not caught in the tests as no currently implemented dispersion model contains the ΔωHAC parameter. Hence it is a latent bug. The tests do catch a minor error with the 'R2eff' model in which the I0 parameter is always returned. I0 should only be returned when exponential curve data is present. This bug has no apparent affect on the current operation of relax, so the parameter is probably handled correctly downstream.
  • Module specific_analyses.relax_disp.parameters: Fix for loop_parameters() with the 'R2eff' model. This now only returns the I0 parameter when exponential curve data is present. This fix has no apparent affect on the operation of relax, so the I0 parameter is probably correctly handled in code that calls the loop_parameters() function.
  • Dispersion: Shift of the model parameters from the parameter loop to lib.dispersion.variables. This removes all references to specific model parameters from the loop_parameters() function in the specific_analyses.relax_disp.parameters module into lib.dispersion.variables. This simplifies the loop_parameters() function and should minimise latent bugs.
  • Unit tests: Addition of two tests for specific_analyses.relax_disp.parameters.linear_constraints(). The two unit tests are Test_parameters.test_linear_constraints_clustered_spins and Test_parameters.test_linear_constraints_single_spin in the [unit test module _specific_analyses._relax_disp.test_parameters. These show that the linear constraints are correctly assembled for single and clustered spins for all models.
  • Module specific_analyses.relax_disp.parameters: Docstring, whitespace, and comment fixes.
  • Unit tests: Addition of tests for lib.dispersion.ns_mmq_3site and lib.dispersion.ns_r1rho_3site. These are to catch bug #9, and specifically test for when pA is 1.0 and the other probabilities are zero. Two new unit tests of the _lib._dispersion.test_ns_mmq_3site module include Test_ns_mmq_3site.test_ns_mmq_3site_mq and Test_ns_mmq_3site.test_ns_mmq_3site_sq_dq_zq, and a single new unit test of the _lib._dispersion.test_ns_r1rho_3site module is Test_ns_r1rho_3site.test_ns_r1rho_3site.
  • Unit tests: Addition of two tests for specific_analyses.relax_disp.parameters.param_conversion(). The two unit tests are Test_parameters.test_param_conversion_clustered_spins and Test_parameters.test_param_conversion_single_spin in the unit test module _specific_analyses._relax_disp.test_parameters. These tests uncovered that the pC parameter for the 3-site R1ρ dispersion models 'NS R1rho 3-site' and 'NS R1rho 3-site linear' is not being calculated in the param_conversion() function. This is now reported as bug #11.
  • Unit tests: Creation of the Test_parameters.test_param_conversion_clustered_spins_sim test. This is to check the specific_analyses.relax_disp.parameters.param_conversion() function for a cluster of 2 spins for Monte Carlo simulations. It was a failed attempt to catch bug #10. The problem probably lies in the Monte Carlo simulation setup functions in the specific analysis API rather than in the module specific_analyses.relax_disp.parameters.
  • Unit tests: Test of the dispersion specific analysis API function sim_init_values(). This is an attempt at catching bug #10, the failure of the 3-site dispersion models when setting the pC parameter for Monte Carlo simulations. The failing test however shows that the sim_init_values() function probably needs a complete overhaul.
  • Dispersion: Improved handling of deselected spins in the loop_parameters() function. This is from the specific_analyses.relax_disp.parameters module. The function can now handle the first spins in the cluster being deselected.
  • FSFCV configuration: Skip some false positive copyrights in the docs/CHANGES file.
  • Bugfixes:
  • Fix for bug #2, the failure of the structure.read_pdb user function in the GUI. The problem was that the file selection argument was being set up incorrectly as two GUI elements - an inactive file selection element and a normal value setting GUI element. Only the second value input GUI element was active (due to the GUI elements being stored in a dictionary, with the first key value being overwritten by the second).
  • Fix for bug #3, the absence of user function argument validation within the GUI. The code for the user function argument validation in the prompt/script UIs was simply copied and slightly modified to fit into the GUI user function window execution. All arguments are now passed into the new lib.arg_check.validate_arg() function and are checked based on their user function definitions.
  • Fix for bug #4, the relax controller in the GUI not displaying text when required. Calls to the captured IO stream flush() methods are now been made in a number of places to allow the controller to show the text when required. This includes after printing out the intro text, after any captured and GUI handled errors, after clicking on the help→licence menu entry, after thread exceptions, and after a number of GUI message dialogs. The bug is only present in relax 4.1.0.
  • Typo fix in the description of the 'atomic' argument for the structure.rmsd user function.
  • Fix for bug #5, the incorrect numpy version check in the relaxation dispersion auto-analysis. The dep_check.version_comparison() function is now used for the version comparisons.
  • Dispersion: Fix for bug #7, the model list containing 'No Rex' twice. The MODEL_LIST_FULL variable contained the model 'No Rex' twice. The only manifestation of the bug is a RelaxError message showing the full list of models, when a user selects a non-existent dispersion model.
  • Dispersion: Fix for bug #6, the incorrect parameter counting for 3-site models with spin clustering. The issue was that the list of spin-specific parameters was incomplete. To resolve this, the parameter names have been shifted into the lib.dispersion.variables module lists PARAMS_R1, PARAMS_GLOBAL, and PARAMS_SPIN. By removing the parameter names from other parts of relax, the lib.dispersion.variables module will serve as a single point of failure and hence it will much easier to maintain the relaxation dispersion code when new models with new parameters are added.
  • Dispersion: Fix for bug #8, the accidental modification of the hardcoded variables. The MODEL_PARAMS lists in lib.dispersion.variables were accidentally being modified by the Model_class class in the specific_analyses.relax_disp.model module. The list for a given model was being set as the self.params list. This list would then have the 'r1' parameter pre-pended to it if that parameter is optimised for a model, and hence the lib.dispersion.variables list would be permanently modified. Now copy.deepcopy() is being used for all variables to avoid this issue. This bug was uncovered in the unit tests as the _specific_analyses._relax_disp.test_model tests were causing 'r1' to be added, and then the later _specific_analyses._relax_disp.test_parameters tests would fail as 'r1' should not be in those lists. This bug is highly unlikely to be encountered by users of relax. You would need to run two analyses, one after the other without closing relax, and the first analysis would need to have R1 optimised and the second not.
  • Dispersion: Fix for bug #9, the failure of the 3-site dispersion models when pB and pC are zero. When both are zero, for example during a comprehensive grid search when model nesting is not utilised, a divide by zero error occurs. This is now caught and large values (1e100) are set for the rates instead.
  • Dispersion: Fix for bug #11, the missing pC calculation for the 3-site R1ρ models. The models 'NS R1rho 3-site' and 'NS R1rho 3-site linear' were simply missing from the list of models for the pC parameter.
  • Dispersion: Fix for bug #10, the 3-site model failure of setting pC for Monte Carlo simulations. For this, the sim_init_values() function of the relaxation dispersion specific API has been completely rewritten. The specific_analyses.relax_disp.parameters.param_conversion() function is now called at the start to generate initial non-model parameters, and at the end to populate the simulation structures. The rest of the function has been stripped down and significantly simplified.

New in relax 4.0.1 (Dec 16, 2015)

  • Features:
  • Many improvements for the compilation of the HTML version of the relax manual.
  • Updated relax to eliminate all FutureWarnings from numpy ≥ 1.9, to future-proof relax against upcoming numpy behaviour changes.
  • Ability to handle replicated R2,eff data points by the relax_disp.r2eff_read user function, but adding 0.001 to the frequency value for the replicated point.
  • A new sample script for loading a model-free results file and back-calculating relaxation data.
  • Improvements for the handling of PDB structural data.
  • Implementation of the structure.pca user function for performing principle component analyses (PCA) of an ensemble of structures.
  • Addition of a script for rapid deployment on the Google Cloud Computing infrastructure.
  • Changes:
  • Fix for the rigid frame order model 2nd degree frame order matrix in the manual. The wrong symbol was being used.
  • Removed the newparagraph and newsubparagraph definitions from the LaTeX manual. These were causing conflicts with latex2html, preventing the HTML version of the manual from being compiled. These definitions are unnecessary for the current set up of the sectioning in the manual.
  • Modified the short captions in the new frame models chapter of the manual. The runic ᛞ character has been replaced simply by 'Daeg'. This is due to incompatibilities with latex2html which prevents the HTML manual from being compiled.
  • Removal of the definition of a fixed-width table column from the LaTeX manual preamble. This is required as the definition breaks latex2html compatibility, causing a corruption in the figure numbering resulting in the images in the HTML to be essentially randomised.
  • Removal of the accents package to allow the HTML manual to be compiled. The accents LaTeX package is not compatible with latex2html, so the easiest fix is to eliminate the package.
  • Manually rotated the frame order matrix element EPS manual figures, for latex2html compatibility. The '90 rotate' command has been deleted and the bounding box permuted as a b c d → b -c d -a. This allows the angle argument in the \includegraphics{} command to be dropped, as latex2html does not recognise this. It allows the figures to be visible in the HTML version of the manual.
  • Redesign of the frame order parameter nesting table in the manual for latex2html compatibility. The table uses the tikz package, which is fatal for latex2html, even if not used. Therefore the table in the docs/latex/frame_order/parameter_nesting.tex file has been converted into a standalone LaTeX document to create a cropped postscript version of the tikz formatted table. A compilation script has been added as well. The resultant *.ps file is now included into the PCS numerical integration section, rather than this section creating the tikz table. All tikz preamble text has been removed to allow latex2html to run.
  • Workaround for latex2html not being able to handle the allrunes package or associated font. In the preamble htmlonly environment, the frame order symbols are redefined using the text 'Daeg' instead of the runic character ᛞ.
  • Fixes for sub and superscripts throughout the manual. This introduces {} around all sub and superscripted \textrm{} instances. This is not needed for the PDF version of the manual as the missing bracket problem is avoided, but it affects the HTML version of the manual compiled by latex2html, which requires the correct notation. The fixes are for both the new frame order chapter as well as the relaxation dispersion chapter.
  • Editing and fixes for the relax 4.0.0 part of the CHANGES file.
  • Updated and improved the wiki instructions in the relax release checklist document.
  • One more wiki instruction about checking for dead links in the release checklist document.
  • More minor changes to the 'Announcement' section of the release checklist document.
  • Updated the shell script for finding duplicated titles in the LaTeX files of the manual.
  • Converted the duplicate title finding shell script into a Python script. The Python script is far more advanced and uses a different logic to produce a table of replicated titles and their count. The script also returns a failed exit status when replicates exist.
  • Converted the replicated title finding Python script to use a class structure. This allows the script to be imported as a module. The replicate finding has been shifted into a find() class method.
  • Renamed the replicate title finding script.
  • Removed the duplicate LaTeX title finding shell script. This is now handled by the far more advanced Python script.
  • The Scons compilation of the PDF and HTML manuals now checks for replicated titles. A new replicate_title_check target has been added to the scons scripts. This calls the find() method of the replicate LaTeX title finding script to determine if any titles are replicated, and if so the scons target returns with a sys.exit(1) call. This target is set at the start of the user_manual_pdf, user_manual_pdf_nofetch, user_manual_html, user_manual_html_nofetch scons targets. The result is that the manual cannot be compiled if replicate titles exist, forcing the titles to be changed. The result will be that the HTML pages will all be unique, as replicated titles results in only one HTML page being created for all the sections.
  • Elimination of replicated titles in the LaTeX sources that the new frame order chapters introduced.
  • Removal of an old replicated title in the LaTeX sources for the manual. This is the title 'Model-free analysis' which is used for the entire specific analysis chapter as well as for the model-free analysis section of the values, gradients, and Hessians for optimisation chapter.
  • Fixes and improved printouts for the replicate_title_check scons target.
  • Updated all of relax to protect against future changes occurring in the numpy Python package. From numpy version 1.9, the FutureWarning __main__:1: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future. is seen in a large percentage of all relax's user functions. This is caught and turned into a RelaxWarning with the same message. The issue is that the behaviour of the comparison operators == and != will change with future numpy versions. These have been replaced with is and is not throughout the relax code base. Changes have also been made to the minfx and bmrblib packages to match.
  • More future protection against numpy changes. The FutureWarning is `rank` is deprecated; use the `ndim` attribute or function instead. To find the rank of a matrix see `numpy.linalg.matrix_rank`. Therefore the N-state model target function method paramag_info() has been updated to use the .ndim attribute and longer use numpy.rank() function.
  • Created the Mf.test_bug_23933_relax_data_read_ids system test. This is designed to catch bug #23933, the "NameError: global name 'ids' is not defined" problem when loading relaxation data. A truncated version of the PDB file and relaxation data, the full versions of which are attached to the bug report, consisting solely of residues 329, 330, and 331 have been added to the test suite shared data directories, and the system test written to catch the NameError.
  • Updated the Mf.test_bug_23933_relax_data_read_ids system test to catch the RelaxMultiSpinIDError. This allows the system test to pass, as a RelaxMultiSpinIDError is expected.
  • Updated the minfx and bmrblib versions in the release checklist document to 1.0.12 and 1.0.4. This is to remove the numpy FutureWarning messages about the == None and =! None comparisons to numpy data structures, which in the future will change in behaviour.
  • Increased the Gna! news item sectioning depth in the release checklist document.
  • Expanded the description of the sequence.attach_protons user function. This follows from http://thread.gmane.org/gmane.science.nmr.relax.user/1849/focus=1855.
  • Added initial data for testing data from Paul Schanda. This will demonstrate that there are several possibilities to enhance the R2,eff point method.
  • Added the Relax_disp.test_paul_schanda_nov_2015 system test. This will catch the loaning of nan values.
  • Made additional check in sequence reading, that nan values are skipped.
  • Making sure that the replicated 4000 Hz point for the 950 MHz experiment is not overwritten.
  • In the Relax_disp.test_paul_schanda_nov_2015 system test, added a test of counting the R2,eff values. This shows that the replicated R2,eff at 950 MHz/4000 Hz point is overwritten. A solution could be to change the dispersion frequency very little, to allow the addition of the data point.
  • Added further tests to Relax_disp.test_paul_schanda_nov_2015. This will show that replicates of R2,eff values is not handled well.
  • In the function of r2eff_read in data module of the dispersion, added the possibilities to read R2,eff values which are replicated. This is done first checking if the dispersion key exists in the R2,eff dictionary. If it exists, continue add 0.001 to the frequency until a new possibility exists. This should help handle multiple R2,eff points, as separate values and not taking any decision to average them.
  • Added the expectation of raising an relax error, if trying to plot and no model information is stored.
  • Raising an error if plotting dispersion curves, and no model is saved.
  • Changed example script for analysing data.
  • Extended the Relax_disp.test_paul_schanda_nov_2015 system test to include auto-analysis and clustered fits. This should show that the analysis is now possible.
  • Added a temporary state and a script for GUI setup to the data Paul Schanda.
  • Added the Relax_disp.test_paul_schanda_nov_2015 GUI test. This will show that loading a state will create a problem. Traceback (most recent call last): TypeError: int() argument must be a string or a number, not 'NoneType'.
  • Added a sample script for back-calculating relaxation data from a model-free results file. This is useful when the results file is not the final model, as these results file do not contain the back-calculated data. This is in response to Christina Möller's support request #3303.
  • Using Gary's lib.float.isNaN() instead of math.isnan(), to have backwards compatibility with python 2.5.
  • Fix for spelling mistake and documenting the new behavior of relax_disp.r2eff_read, when reading R2,eff points with the same frequency. If the spin-container already contain R2,eff values with the 'frequency of the CPMG pulse' or 'spin-lock field strength', the frequency will be changed by a infinitesimal small value of + 0.001 Hz. This allow for duplicates or more of the same frequency.
  • Modified the internal structural object to be less influenced by the format of the PDB. The PDB serial number is now intelligently handled, in that it is reset to 1 when a new model is created. This information is still kept for supporting the logic of the reading of the CONECT records, and will be eliminated in the future. The chain ID information is now no longer stored in the internal structural object, as this information is recreated by the structure.write_pdb user function based on how the internal structural object has been created.
  • Updates to the Noe and Structure system test classes for the internal structural object changes. The serial number can now be reset, and the chain ID information is no longer stored.
  • Added a file to the test suite shared data to help implement the PCA structural analysis. This is the N-domain of the CaM-IQ complex used in a frame order analysis. It is the first 5 structures from a call to the frame_order.distribute user function, with the different rigid-bodies merged back together into a single molecule.
  • Created the structure.pca user function front end. This is currently modelled on the structure.rmsd user function framework.
  • Basic implementation of the structure.pca user function back end. This is the new pca() function of the pipe_control.structure.main module. It simply performs some checks, assembles the atomic coordinates, and the passes control to the relax library pca_analysis() function of the currently unimplemented lib.structure.pca module.
  • Partial implemented of the PCA analysis in the relax library. This is for the new structure.pca user function. The lib.structure.pca module has been created, and the pca_analysis() function created to calculate the structure covariance matrix, via the calc_covariance_matrix() function, and then calculate the eigenvalues and eigenvectors of the covariance matrix, sorting them and truncating to the desired number of PCA modes.
  • Added the algorithm and num_modes arguments to the structure.pca user function. These are passed all the way into the relax library backend.
  • Implemented the SVD algorithm for the PCA analysis in the relax library. This simply calls numpy.linalg.svd().
  • The PCA analysis in the relax library now calculates the per structure projections along the PCs.
  • The PCA analysis function in the relax library is now returning data. This includes the PCA values and vectors, and the per structure projections.
  • The PCA values and vectors, and the per structure projections are now being stored. This is in the structure.pca user function backend in the pipe_control.structure.main module.
  • Added the format and dir arguments to the structure.pca user function. This is to the front and back ends.
  • Modified the assemble_structural_coordinates() method to return more information. This is from the pipe_control.structure.main module. The lists boolean argument is now accepted which will cause the function to additionally return the object ID list per molecule, the model number list per molecule, and the molecule name list per molecule.
  • The structure.pca user function now creates graphs of the PC projections. This includes PC1 vs. PC2, PC2 vs. PC3, etc.
  • Added the Gromacs PCA results for the distribution.pdb file. This includes a script used to execute all parts of Gromacs and all output files.
  • Updated the Gromacs PCA results for the newest 5.1.1 Gromacs version.
  • Created an initial Structure.test_pca system test. This executes the new structure.pca user function, and checks if data is stored in cdp.structure.
  • Improved the graphs in the backend of the structure.pca user function. The graphs are now clustered so that different models of the same structure in the same data pipe are within one graph set. The graph header has also been improved.
  • Expanded the Structure.test_pca system test checks to compare to the values from Gromacs.
  • A weighted mean structure can now be calculated. This is for the calc_mean_structure() function of the relax library module lib.structure.statistics. Weights can now be supplied for each structure to allow for a weighted mean to be calculated and returned.
  • Added support for observer structures in the structure.pca user function. This allows a subset of the structures used in the PC analysis to have zero weight so that these structures can be used for comparison purposes. The obs_pipes, obs_models, and obs_molecules arguments have been added to the user function front end. The backend uses this to create an array of weights for each structure. And the lib.structure.pca functions use the zero weights to remove the observer structures from the PC mode calculations.
  • Created the Structure.test_pca_observers system test. This is for testing the new observer structures concept of the structure.pca user function.
  • Improved the printouts from the relax library principle component analysis. This is in the pca_analysis() function of the lib.structure.pca module.
  • Fixes and improvements for the graphs produced by the structure.pca user function. The different sets are now correctly created, and are now labelled in the plots.
  • Adding a testing deploy script, for rapid deployment on Google Cloud Computing. This is for an intended install in Ubuntu 14.04 LTS.
  • Expanding script for installation.
  • Putting installation into functions in deploy script.
  • Splitting deploy script into several small functions.
  • Adding checking statements to install script.
  • When sourcing the scripts, several functions can be performed instead.
  • Added spaces to install script for better printing.
  • Adding a tutorial script.
  • Adding 2 tutorial scripts.
  • Fix for small spin ID error in tutorial script.
  • Created a system test for catching bug #24131, the BMRB export failure when the SpinContainer object has no S2 attribute, as reported by Martin Ballaschk.
  • Modified the Mf.test_bug_24131_bmrb_deposition system test to check for the RelaxError. The test results in a RelaxError, as the results file contains no selected spins.
  • Added the Mf.test_bug_24131_missing_interaction system test to catch another problem. This is part of bug #24131, the BMRB export failure with the SpinContainer object having no S2 value. However the previous fix of skipping deselected spins introduced a new problem of relax still searching for the interatomic interactions for that deselected spin.
  • Bugfixes:
  • Replicated titles in the HTML version of the relax manual, and hence replicated HTML file names overwriting earlier sections, have been eliminated.
  • Fix for bug #23933, the "NameError: global name 'ids' is not defined" problem when loading relaxation data. The bug was introduced back in November 2014, and is due to some incomplete error handling code. The problem is that the spin type that the relaxation data belongs to (@N vs. @H) has not been specified. Now the correct RelaxMultiSpinIDError is raised. The ids variable did not exist - it was code that was planned to be added, but never was and was forgotten.
  • Fix for the CSA constant equation in the model-free chapter of the manual. This was spotted by Christina Möller and reported on the relax-users mailing list.
  • Bug fix for the storage of the XML structural object in the state and results files. Previously any objects added to cdp.structure (or any structure object) would not be saved by the structural object to_xml() method unless the function is explicitly modified to store that object. Now all objects present will be converted to XML.
  • Fix for the relaxation dispersion analysis in the GUI, as caught by the Relax_disp.test_paul_schanda_nov_2015 GUI test. When loading from a script state file, the value of None can be present. This is now set to the standard values.
  • Fix for running relax at a server with no graphical display and using matplotlib. The error was found with the Relax_disp.test_repeat_cpmg system test. And the error generated was: QXcbConnection: Could not connect to display. Aborted (core dumped). The backend of matplotlib has to be changed. This is for example described in: http://stackoverflow.com/questions/2766149/possible-to-use-pyplot-without-display and http://stackoverflow.com/questions/8257385/automatic-detection-of-display-availability-with-matplotlib.
  • Modified the behaviour of the bmrb.write user function backend for a model-free analysis (fix for bug #24131). This is in the bmrb_write() method of the model-free analysis API. Deselected spins are now skipped and a check has been added to be sure that spin data has been assembled.
  • Another fix for bug #24131, the BMRB export failure when the SpinContainer object has no S2 attribute. Now no data is stored in the BMRB file if a model-free model has not been set up for the spin. This allows the test suite to pass.
  • Bug fix to allow the Mf.test_bug_24131_missing_interaction system test to pass. This is part of bug #24131, the BMRB export failure with the SpinContainer object having no S2 value. The problem was when assembling the diffusion tensor data. The spin_loop() function was being called, as the diffusion tensor is reported for all residues. Therefore the skip_desel=True has been added to match the model-free part.

New in relax 4.0.0 (Oct 16, 2015)

  • Features:
  • The final, complete, and correct implementation of the frame order theory for studying rigid body motions. This is currently for analysing RDC and PCS data from internally aligned systems.
  • Changes:
  • Deletion of the frame_order.average_position user function and all of the associated backend code. This user function allowed the user to specify five different types of displacement to the average moving domain position: a pure rotation, with no translation, about the pivot of the motion in the system; a rotation about the pivot of the motion of the system together with a translation; a pure translation with no rotation; a rotation about the centre of mass of the moving domain with no translation; a rotation about the centre of mass of the moving domain together with a translation. Now the last option will be the default and only option. This option is equivalent to the standard superimposition algorithm (the Kabsch algorithm) to a hypothetical structure at the real average position. The other four are due to the history of the development of the theory. These limit the usefulness of the theory and will only cause confusion.
  • Clean up of the frame order target function code. This matches the previous change of the deletion of the frame_order.average_position user function. The changes include the removal of the translation optimisation flag as this is now always performed, and the removal of the flag which causes the average domain rotation pivot point to match the motional pivot point as these are now permanently decoupled.
  • Alphabetical ordering of functions in the lib.frame_order.pseudo_ellipse module.
  • Eliminated all of the 'line' frame order models, as they are not implemented yet. This is just frontend code - the backend does not exist.
  • Updated the isotropic cone CaM frame order test model optimisation script. Due to all of the changes in the frame order analysis, the old script was no longer functional.
  • Created a script for the CaM frame order test models for finding the average domain position. As the rotation about a fixed pivot has been eliminated, the shift from 1J7P_1st_NH_rot.pdb to 1J7P_1st_NH.pdb has to be converted into a translation and rotation about the CoM. This script will be used to replace the pivot rotation Euler angles with the translation vector and CoM rotation Euler angles. However the structure.superimpose user function will need to be modified to handle both the standard centroid superimposition as well as a CoM superimposition.
  • Updated the CaM frame order test model superimposition script. The structure.superimpose user function is now correctly called. The output log file has been added to the repository as it contains the correct translation and Euler rotation information needed for the test models.
  • Parameter update for the isotropic cone CaM frame order test model optimisation script. The Euler angles for the rotation about the motional pivot have been replaced by the translation vector and Euler angle CoM rotation parameters.
  • Fix for a number of the frame order models which do not have parameter constraints. The linear_constraint() function was returning A, b = [], [] for these models, but these empty numpy arrays were causing the minfx library to fail. These values are now caught and the constraint algorithm turned off in the minimise() specific API method.
  • Increased the precision of all the data in the CaM frame order test data generation base script. These have all been converted from float16 to float64 numpy types.
  • Fix for the RDC error setting in the CaM frame order test data generation base script. The rdc_err data structure is located in the interatomic data containers, no the spin containers.
  • Modification of the structure loading part of the CaM frame order data generation base script. The structures are now only loaded if the DIST_PDB flag is set, as they are only used for generating the 3D distribution of structures. This saves a lot of time and computer memory.
  • Huge speedup of the CaM frame order test data generation base script. By using multidimensional numpy arrays to store the atomic positions and XH unit vectors of all spins, and performing the rotations on these structures using numpy.tensordot(), the calculations are now a factor of 10 times faster. The progress meter had to be changed to show every 1000 rather than 100 iterations. The rotations of the positions and vectors are now performed sequentially, accidentally fixing a bug with the double motion models (i.e. the 'double rotor' model).
  • Modified the CaM frame order test data generation base script to conserve computer RAM. The XH vector and atomic position data structures for all N rotations are now of the numpy.float32 rather than numpy.float64 type. The main change is to calculate the averaged RDCs and averaged PCSs separately, deleting the N-sized data structures once the data files are written.
  • Complete redesign of the CaM frame order data generation base script for speed and memory savings. Although the rotated XH bond vector and atomic position code was very fast, the amount of memory needed to store these in the spin containers and interatomic data containers was huge when N > 1e6. The subsequent rdc.back_calc and pcs.back_calc user function calls would also take far too long. Therefore the base script has been redesigned. The _create_distribution() method has been split into four: _calculate_pcs(), _calculate_rdc(), _create_distribution(), and _pipe_setup(). The _pipe_setup() method is called first to set up the data pipe with all required data. Then the _calculate_rdc() and _calculate_pcs() methods, and finally _create_distribution() if the DIST_PDB flag is set. The calls to the rdc.back_calc and pcs.back_calc user functions have been eliminated. Instead the _calculate_rdc() and _calculate_pcs() methods calculate the averaged RDC and PCS themselves as numpy array structures. Rather than storing the huge rotated vectors and atomic positions data structures, the RDCs and PCSs are summed. These are then divided by self.N at the end to average the values. Compared to the old code, when N is set to 20 million the RAM usage drops from ~20 GB to ~65 MB. The total run time is also decreased on one system from a few days to a few hours (an order or two of magnitude).
  • Changed the progress meter updating for the CaM frame order test data generation base script. The spinner was far too fast, updating every 5 increments, and is now updated every 250. And the total number is now only printed every 10,000 increments.
  • Improvements to the progress meter for the CaM frame order test data generation base script. Commas are now printed between the thousands and the numbers are now right justified.
  • Large increase in accuracy of the RDC and PCS averaging. This is for the CaM frame order test data generation base script. By summing the RDCs and PCSs into 1D numpy.float128 arrays (for this, a 64-bit system is required), and then dividing by N at the end, the average value can be calculated with a much higher accuracy. As N becomes larger, the numerical averaging introduces greater and greater amounts of truncation artifacts. So this change alleviates this.
  • Fix for the RDC and PCS averaging in the CaM frame order test data generation base script. For the double rotor model, or any multiple motional mode model, the averaging was incorrect. Instead of dividing by N, the values should be divided by N^M, where M is the number of motional modes.
  • Huge increase in precision for the CaM frame order free rotor model test data. The higher precision is because the number structures in the distribution is now twenty million rather than one million, and the much higher precision numpy.float128 averaging of the updated data generation base script has been used. This data should allow for a much better estimate of the beta and gamma average domain position parameter values for the free rotor models which are affected by the collapse of the alpha parameter to zero.
  • Huge increase in precision for the CaM frame order double rotor model test data. The higher precision is because the number structures in the distribution is now over twenty million (4500^2) rather than a quarter of a million (500^2). And the much higher precision numpy.float128 averaging of the updated data generation base script has been used.
  • Fix for the constraint deactivation in the frame order minimisation when no constraints are present.
  • Huge increase in precision for the CaM frame order rotor model test data. The higher precision is because the number structures in the distribution is now 20 million rather than 166,666, and the numpy.float128 data averaging has been used.
  • Large increase in precision for the 2nd CaM frame order rotor model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1,000,001 and the numpy.float128 data averaging has been used.
  • Parameter update for the 2nd rotor CaM frame order test model optimisation script. The Euler angles for the rotation about the motional pivot have been replaced by the translation vector and Euler angle CoM rotation parameters.
  • Large increase in precision for the 2nd CaM frame order free rotor model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 999,999 and the numpy.float128 data averaging has been used.
  • Updated the CaM frame order test model superimposition script. The Ca2+ atoms are now deleted from the structures before superimposition so that the centroid matches that used in the frame order analysis.
  • The average domain rotation centroid is printed out when setting up the frame order target functions. This is to help the user understand what is happening in the analysis.
  • Faster clearing of numpy arrays in the lib.frame_order modules. The x[:] = 0.0 notation is now used to set all elements to zero, rather than nested looping over all dimensions. This however has a negligible effect on the test suite timings.
  • Large increase in precision for the CaM frame order pseudo-ellipse model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
  • Improved the value setting in the optimisation() method of the CaM frame order system tests. This is in the base script used by all scripts in test_suite/system_tests/scripts/frame_order/cam/.
  • Changed the average domain position parameter values in the CaM frame order system tests. This is in the base script used by all scripts in test_suite/system_tests/scripts/frame_order/cam/. The translation vector coordinates are now set, as well as the CoM Euler angle rotations. These come from the log file of the test_suite/shared_data/frame_order/cam/superimpose.py script, and are needed due to the simplification of the average domain position mechanics now mimicking the Kabsch superimposition algorithm.
  • The CaM frame order system test mesg_opt_debug() method now prints out the translation vector. This is printed out at the end of all CaM frame order system tests to help with debugging when the test fails.
  • Change for how the CaM frame order system test scripts handle the average domain position rotation. The trick of pre-rotating the 3D coordinates was used to solve the {alpha, beta, gamma} -> {0, beta', gamma'} angle conversion problem in the rotor models no longer works now that the average domain position mechanics has been simplified. Instead, high precision optimised beta' and gamma' values are now set, and the ave_pos_alpha value set to None. The high precision parameters were obtained with the frame_order.py script located in the directory test_suite/shared_data/frame_order/cam/free_rotor. The free rotor target function was modified so that the translation vector is hard-coded to [-20.859750185691549, -2.450606987447843, -2.191854570352916] and the axis theta and phi angles to 0.96007997859534299767 and 4.0322755062196229403. These parameters were then commented out for the model in the module specific_analyses.frame_order.parameters so only beta' and gamma' were optimised. Iterative optimisation was used with increasing precision, ending up with high precision using 10,000 Sobol' points.
  • Updated a number of the CaM frame order system tests for the higher precision data. The new data results in chi-squared values at the real solution to be much closer to zero.
  • Change for how the CaM frame order free-rotor pseudo-ellipse test script handle the average position.
  • Added FIXME comments to the 2nd free-rotor CaM frame order model system test scripts. These explain the steps required to obtain the correct beta' and gamma' average domain position rotation angles.
  • Large increase in precision for the CaM frame order isotropic cone model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
  • Large increase in precision for the CaM frame order free-rotor, isotropic cone model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
  • Updated the CaM frame order free-rotor model test data set for testing for missing data. This is the data in test_suite/shared_data/frame_order/cam/free_rotor_missing_data. To simplify the copying of data from test_suite/shared_data/frame_order/cam/free_rotor and then the deletion of data, the missing.py script was created to automate the process. The generate_distribution.py script and some of the files it creates were removed from the repository so it is clearer how the data has been created.
  • Large increase in precision for the 2nd CaM frame order free-rotor, isotropic cone model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
  • Large increase in precision for the CaM frame order free-rotor, pseudo-ellipse model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
  • Large increase in precision for the CaM frame order pseudo-ellipse model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
  • Updated a number of the CaM frame order system tests for the higher precision data. The new data results in chi-squared values at the real solution to be much closer to zero. The free-rotor pseudo-ellipse models might need investigation however as the chi-squared values have increased.
  • Elimination of the error_flag variable from the frame order analysis. This flag is used to activate some old code paths which have now been deleted as they are never used.
  • Optimisation of the average domain position for the CaM frame order free-rotor models. The log file that shows the optimisation of the average domain position for the free-rotor models has been added to the repository for reference. This is for the simple free-rotor model, but the optimised position holds for the isotropic cone and pseudo-ellipse model data too. To perform the optimisation, the axis_theta and axis_phi parameters were removed from the model and hardcoded into the target function. As the rotor axis is know, this allows the average domain position to be optimised in isolation. Visual inspection of the results confirmed the position to be correct.
  • Fixes for the 2nd frame order free-rotor system tests. The average domain position parameters are now set to the correct values, matching those in the relax log file frame_order_ave_pos_opt.log in test_suite/shared_data/frame_order/cam/free_rotor2.
  • Updated the 2nd CaM free-rotor frame order system tests for the correct average domain position. The chi-squared values are now significantly lower.
  • Increased the precision of the chi-squared value testing in the CaM frame order system tests. The check_chi2 method has been modified so that the chi-squared value is no longer scaled, and the precision has been increased from 1 significant figure to 4. All of the tests have been updated to match.
  • The minimisation verbosity flag now effects the frame order RelaxWarning about turning constraints off.
  • Preformed a frame order analysis on the 2nd CaM free-rotor model test data. This is to check that everything is operating as expected.
  • Small speedup for the frame order target functions for most models. The rotation matrix corresponding to each Sobol' point for the numerical integration is now pre-calculated during target function initialisation rather than once for each function call.
  • Updates for some of the frame order system tests for the rotation matrix pre-calculation change. As the rotation matrix is being pre-calculated, one consequence is that the Sobol' angles are now full 64-bit precision rather than 32-bit. Therefore this changes the chi-squared value a little, requiring updates to the tests.
  • Preformed a frame order analysis on the CaM free-rotor mode test data set. This is to demonstrate that everything is operating correctly.
  • Preformed a frame order analysis on the CaM free-rotor mode test data set with missing data. This is to demonstrate that everything is operating correctly.
  • Attempt to speed up the pseudo-elliptic frame order models. The quasi-random numerical integration of the PCS for the pseudo-ellipse has been modified so that the torsion angle check for each Sobol' point is preformed before the tmax_pseudo_ellipse() function call. A new check that the tilt angle is less than cone_theta_y, the larger of the two cone angles, has also been added to avoid tmax_pseudo_ellipse() when the theta tilt angle is outside of an isotropic cone defined by cone_theta_y.
  • Preformed a frame order analysis on a number of the CaM test data sets. This includes the rotor, isotropic cone, and pseudo-ellipse, and the analyses demonstrate a common bug between all these models.
  • Preformed a frame order analysis on the rigid CaM test data set. This is to demonstrate that everything is operating correctly.
  • Optimisation of the rotor model to the rigid CaM frame order test data. The optimisation script and all results files have been added to the repository.
  • Increased the grid search bounds for the frame order average domain translation. Instead of being a 10 Angstrom box centred at {0, 0, 0}, now the translation search has been increased to a 100 Angstrom box.
  • Proper edge case handling and slight speedup of the frame order PCS integration functions. The case whereby no Sobol' points in the numerical integration lie within the motional distribution is now caught and the rotation matrix set to the motional eigenframe to simulate the rigid state. As the code for averaging the PCS was changed, it was also simplified by removing an unnecessary loop over all spins. This should speed up the PCS integration by a tiny amount.
  • Created a new CaM frame order test data set. This is for the rotor model with a very small torsion angle of 1 degree, and will be used as a comparison to the rigid model and for testing the performance of the rotor model for an edge case.
  • Updated the frame order representations in all of the frame_order.py scripts for the CaM test data. All PDB files are now gzipped to save space, the old pymol.cone_pdb user function calls replaced with pymol.frame_order, and an average domain PDB file for the exact solution is now created in all cases.
  • The minimisation constraints are now turned on for all CaM test data frame_order.py optimisation scripts.
  • Updated the rotor CaM test data frame_order.py script for the parameter reduction. The rotor axis {theta, phi} polar angles have been replaced by the single axis alpha angle. This now matches the script for the 2nd rotor model.
  • Updated the parameters in all of the frame_order.py scripts for the CaM test data. The parameters are now specified at the top of the script as variables. All scripts now handle the change to the translation + CoM rotation for the average domain position rather than having a pure rotation about a fixed pivot, which is no longer supported.
  • The frame_order.num_int_pts user function now throws a RelaxWarning if not enough points are used.
  • Changed the creation of Sobol' points for numerical integration in the frame order target functions. The points are now all created at once using the i4_sobol_generate() rather than i4_sobol() function from the extern.sobol.sobol_lib module.
  • Increased the number of integration points from 50 or 100 to 5000. This is for all CaM frame_order.py test data optimisation scripts. The higher number of points are essential for optimising the frame order models and hence for checking the relax implementation.
  • Updated the frame_order.py optimisation script for the small angle CaM rotor frame order test data. This now has the correct rotor torsion angle of 1 degree, and the spherical coordinates are now converted to the axis alpha parameter.
  • Expanded the capabilities of the pymol.frame_order user function. The isotropic and pseudo-elliptic cones are now represented as they used to be under the pymol.cone_pdb user function. To avoid code duplication, the new represent_cone_axis(), represent_cone_object() and represent_rotor_object() functions have been created to send the commands into PyMOL.
  • Increased the precision of all of the CaM frame order system tests by 40 times. The number of Sobol' integration points have been significantly increased while only increasing the frame order system test timings by ~10%. This allows for checking for chi-squared values at the minima much closer to zero, and is much better for demonstrating bugs.
  • Optimisation constraints are no longer turned off in the frame order auto-analysis. Constraints are now supported by all frame order models, or automatically turned off for those which do not have parameter constraints.
  • Fix for the frame order visualisation script created by the auto-analysis. The call to pymol.frame_order is now correct for the current version of this user function.
  • Removed a terrible hack for handling the frame order analysis without constraints. This is no longer needed as the log-barrier method is now used to constrain the optimisation, so that the torsion angle can no longer be negative.
  • Constraints are now implemented in the frame order grid search. This is useful for the pseudo-elliptic models as the cone theta_x < theta_y constraint halves the optimisation space.
  • Expanded the CaM rotor test data frame_order.py optimisation script. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower. The results of the new optimisation are included.
  • Expanded the CaM pseudo-ellipse test data frame_order.py optimisation script. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower. The results of the new optimisation are included.
  • Added one more iteration for the zooming optimisation of the frame order auto-analysis. This is to improve the speed of optimisation when all RDC and PCS data is being used. The previous iterations where with [100, 1000, 200000] Sobol' integration points and [1e-2, 1e-3, 1e-4] function tolerances. This has been increased to [100, 1000, 10000, 100000] and [1e-2, 1e-3, 5e-3, 1e-4]. The final number of points has been decreased as that level of accuracy does not appear to be necessary. These are also only default values that the user can change for themselves.
  • Updated the CaM frame order data generation base script to print out more information. This is for the first axis system so that the same amount of information as the second system is printed.
  • Expanded the CaM isotropic cone test data frame_order.py optimisation script and added the results. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower.
  • Important fix for the 2nd rotor model of the CaM frame order test data. The tilt angle was not set, and therefore the old data matched the non-tilted 1st rotor model. All PCS and RDC data has been regenerated to the highest quality using 20,000,000 structures.
  • Updated the 3 Frame_order.test_cam_rotor2* system tests for the higher quality data.
  • Expanded the 2nd CaM pseudo-ellipse test data frame_order.py optimisation script. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower. The results of the new optimisation have been added to the repository.
  • Expanded the CaM free-rotor isotropic cone test data frame_order.py optimisation script. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower. The results of the new optimisation have been added to the repository.
  • Expanded all remaining CaM test data frame_order.py optimisation scripts. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower.
  • Updated the CaM 2-site to rotor model frame_order.py optimisation script for the parameter reduction. The rotor frame order model axis spherical angles have now been converted to a single alpha angle.
  • Fix for a number of the frame order models which do not have parameter constraints. This change to the grid_search() API method is similar to the previous fix for the minimise() method. The linear_constraint() function was returning A, b = [], [] for these models, but these empty numpy arrays were causing the dot product with A to fail in the grid_search() API method. These values are now caught and the constraint algorithm turned off.
  • Converted the 'free rotor' frame order model to the new axis_alpha parameter system. 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 alpha parameter defines the rotor axis angle from the xy-plane.
  • Parameter conversion for all of the CaM free rotor test data frame_order.py optimisation scripts. The rotor axis spherical angles have been replaced by the axis alpha angle defining the rotor with respect to the xy-plane.
  • Modified the CaM frame order base system test script to catch a bug in the free rotor model. The axis spherical angles are no longer set for the rotor or free rotor models, as they use the alpha angle instead and the lack of the theta and phi parameters triggers the bug. The PDB representation of the frame order motions is also now tested for all frame order models, as it was turned off for the rigid, rotor and free rotor models and this is where the bug lies.
  • Fix for the failure of the frame_order.pdb_model user function for the free rotor frame order model. This is due to the recent parameter conversion to the axis alpha angle.
  • Eliminated the average position alpha Euler angle parameter from the free-rotor pseudo-ellipse model. As this frame order model is a free-rotor, the average domain position is therefore undefined and it can freely rotate about the rotor axis. One of the Euler angles for rotating to the average position can therefore be removed, just as in the free rotor and free rotor isotropic cone models.
  • Eliminated the ave_pos_alpha parameter from the free rotor psuedo-ellipse model target function. The average domain position alpha Euler angle has already been removed from the specific analyses code and this change brings the target function into line with these changes.
  • Added the full optimisation results for the 2nd rotor frame order model for the CaM test data. This is from the new frame_order.py optimisation script and the results demonstrate the stability of the rotor model.
  • Added the full optimisation results for the small angle rotor CaM frame order test data. This is from the new frame_order.py optimisation script and the results demonstrate the stability of the rotor model, even when the rotor is as small as 1 degree.
  • Fix for the free rotor PDB representation created by the frame_order.pdb_model user function. The simulation axes were being incorrectly generated from the theta and phi angles, which no longer exist as they have been replaced by the alpha angle.
  • Added the full optimisation results for the free rotor pseudo-ellipse frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
  • Added the full optimisation results for the rotor frame order model. This is for the 2-site CaM test data using the new frame_order.py optimisation script.
  • The CaM frame order data generation base script now uses lib.compat.norm(). This is to allow the test suite to pass on systems with old numpy versions whereby the numpy.linalg.norm() function does not support the new axis argument.
  • Modified the pymol.cone_pdb and pymol.frame_order user functions to use PyMOL IDs. The PyMOL IDs are used to select individual objects in PyMOL rather than all objects so that the subsequent PyMOL commands will only be applied to that object. This allows for multiple objects to be handled simultaneously.
  • Added the full optimisation results for the free rotor frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
  • Added the full optimisation results for the 2nd free rotor frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
  • Added the full optimisation results for the free rotor frame order model with missing data. This is for the CaM test data using the new frame_order.py optimisation script.
  • Added a script for recreating the frame order PDB representation and displaying it in PyMOL. This is for the optimised results.
  • Fixes for the rotor object created by the frame_order.pdb_model user function. The rotor is now also shown for the free rotor pseudo-ellipse, despite it being a useless model, and the propeller blades are no longer staggered for all the free rotor models so that two circles are no longer produced.
  • Updated the free rotor and 2nd free rotor PDB representations using the represent_frame_order.py script. This is for the CaM frame order test data.
  • Reparameterisation of the double rotor frame order model. The two axes defined by spherical angles have been replaced by a full eigenframe and the second pivot has been replaced by a single displacement along the z-axis of the eigenframe.
  • Removed the 2nd pivot point infrastructure from the frame order analysis. The 2nd pivot is now defined via the pivot_disp parameter.
  • Added the 2nd rotor axis torsion angle to the list of frame order parameters. This is for the double rotor model.
  • Comment fixes for the eigenframe reconstruction in the frame order target functions.
  • Converted the double rotor frame order model target function to use the new parameterisation.
  • Fix for the PDB representation generated by frame_order.pdb_model for the free rotor pseudo-ellipse.
  • Fix for the Frame_order.test_rigid_data_to_free_rotor_model system test. As the free rotor has undergone a reparameterisation, the chi-squared value is now higher. The value is reasonable as the free rotor can never model the rigid system.
  • Removed the structure loading and transformation from the CaM frame order system tests. This was mimicking the old behaviour of the auto-analysis. However as that behaviour has been shifted into the backend of the frame_order.pdb_model user function, which is called by these system tests as well, the code is now redundant and is wasting test suite time.
  • Removed the setting of the second pivot point in the CaM frame order system tests. The second pivot point has been removed from the double rotor frame order model to eliminate parameter redundancy, so no models now have a conventional second pivot.
  • Modified the CaM frame order system test base script to test alternative code paths. This pivot point was fixed in all tests, so the code in the target functions behind the pivot_opt flag was not being tested. Now for those system tests whereby the calc rather than minimise user function is called, the pivot is no longer fixed to execute this code.
  • Simplification and clean up of the RDC and PCS flags in the frame order target functions. The per-alignment flags have been removed and replaced by a global flag for all data. This accidentally fixes a bug when only RDCs are present, as the calc_vectors() method was being called when it should not have been.
  • Speedup and simplifications for the vector calculations used for the PCS numerical integration. This has a minimal effect on the total speed as the target function calc_vectors() method is not the major bottleneck - the slowest part is the quasi-random numerical integration. However the changes may be useful for speeding up the integration later on. The 3D pivot point, average domain rotation pivot, and paramagnetic centre position arrays are now converted into rank-2 arrays in _init_() where the first dimension corresponds to the spin. Each element is a copy of the 3D array. These are then used for the calculation of the pivot to atom vectors, eliminating the looping over spins. The numpy add() and subtract() ufuncs are used together with the out argument for speed and to avoid temporary data structure creation and deletion. The end result is that the calculated vector structure is transposed, so the first dimension are the spins. The changes required minor updates to a number of system tests. The target functions themselves had to be modified so that the pivot is converted to the larger structure when optimised, or aliased.
  • Added a script for timing different ways to calculate PCSs and RDCs for multiple vectors. This uses the timeit module rather than profile to demonstrate the speed of 7 different ways to calculate the RDCs or PCSs for an array of vectors using numpy. In the frame order analysis, this is the bottleneck for the quasi-random numerical integration of the PCS. The log file shows a potential 1 order of magnitude speedup between the 1st technique, which is currently used in the frame order analysis, and the 7th and last technique. The first technique loops over each vector, calculating the PCS. The last expands the PCS/RDC equation of the projection of the vector into the alignment tensor, and calculates all PCSs simultaneously.
  • Added another timing script for RDC and PCS calculation timings. This time, the calculation for multiple alignments is now being timed. An addition set of methods for calculating the values via tensor projections have been added. For 5 alignments and 200 vectors, this demonstrates a potential 20x speedup for this part of the RDC/PCS calculation. Most of this speedup should be obtainable for the numerical PCS integration in the frame order models.
  • Small speedup for all of the frame order models. The PCS averaging in the quasi-random numerical integration functions now uses the multiply() and divide() numpy methods to eliminate a loop over the alignments. For this, a new dimension over the spins was added to the PCS constant calculated in the target function _init_() method. In one test of the pseudo-ellipse, the time dropped from 191 seconds to 172.
  • Added another timing script for helping with speeding up the frame order analysis. This is for the part where the rotation matrix for each Sobol' integration point is shifted into the eigenframe.
  • Python 3 fix for the CaM frame order system test base script.
  • Added the full optimisation results for the torsionless isotropic cone frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
  • Small speedups for all of the frame order models in the quasi-random numerical PCS integration. These changes result in an ~10% speedup. Testing via the func_pseudo_ellipse() target function using the relax profiling flag, the time for one optimisation decreased from 158 to 146 seconds. The changes consist of pre-calculating all rotations of the rotation matrix into the motional eigenframe in one mathematical operation rather than one operation per Sobol' point rotation, unpacking the Sobol' points into the respective angles prior to looping over the points, and taking the absolute value of the torsion angle and testing if it is out of the bounds rather than checking both the negative and positive values.
  • Attempt at speeding up the torsionless pseudo-ellipse frame order model. The check if the Sobol' point is outside of an isotropic cone defined by the largest angle theta_y is now performed to avoid many unnecessary calls to the tmax_pseudo_ellipse() function. This however reveals a problem with the test suite data for this model.
  • Updated all of the CaM frame order system tests for the recent speedup. The speedup switched to the use of numpy.tensordot() for shifting each Sobol' rotation into the eigenframe rather than the previous numpy.dot(). Strangely this affects the precision and hence the chi-squared value calculated for each system test - both increasing and decreasing it randomly.
  • The frame order target function calc_vectors() method arguments have all been converted to keywords. This is in preparation for handling a second pivot argument for the double rotor model.
  • Updated the double rotor frame order model to be in a pseudo-functional state. Bugs in the target function method have been removed, the calc_vectors() target function method now accepts the pivot2 argument (but does nothing with it yet), and the lib.frame_order.double_rotor module has been updated to match the logic used in all other lib.frame_order modules.
  • The frame_order.pdb_model user function no longer tries to create a cone object for the double rotor.
  • Added a timeit script and log file for different ways of checking a binary numpy array.
  • Modified the rigid_test.py system test script to really be the rigid case. This is used in all of the Frame_order.test_rigid_data_to_*_model system tests. Previously the parameters of the dynamics were set to being close to zero, to catch the cases were a few Sobol' PCS integration points were accepted. But now the case were no Sobol' points can be used is being tested. This checks a code path currently untested in the test suite, demonstrating many failures.
  • Fix for the frame order matrix calculation for a pseudo-elliptic cone with angles of zero degrees. The lib.frame_order.pseudo_ellipse_torsionless.compile_2nd_matrix_pseudo_ellipse_torsionless() function has been changed to prevent a divide by zero failure. The surface area normalisation factor now defaults to 0.0.
  • Fixes for all PCS numeric integration for all frame order models in the rigid case. The exact PCS values for the rigid state are now correctly calculated when no Sobol' points lie within the motional model. The identity matrix is used to set the rotation to zero, and the PCS values are now multiplied by the constant.
  • Updates for the chi-squared value in all the Frame_order.test_rigid_data_to_*_model system tests. This is now much reduced as the true rigid state is now being tested for.
  • The rigid frame order matrix for the pseudo-ellipse models is now correctly handled. This allows the rigid case RDCs to be correctly calculated for both the pseudo-ellipse and torsionless pseudo-ellipse models. The previous catch of the theta_x cone angle of zero was incorrectly recreating the frame order matrix, which really should be the identity matrix. However truncation artifacts due to the quadratic SciPy integration still cause the model to be ill-conditioned near the rigid case. The rigid case is correctly handled, but a tiny shift of the parameters off zero cause a discontinuity.
  • Updates for the Frame_order.test_rigid_data_to_pseudo_ellipse*_model system tests. The chi-squared value now matches the rigid model.
  • Large increase in precision for the CaM frame order torsionless pseudo-ellipse model test data set. In addition, the theta_x and theta_y angles have also been swapped so that the new constraint of 0

New in relax 3.3.9 (Oct 2, 2015)

  • Features:
  • Improvements to the automatic relaxation dispersion protocol for repeated CPMG data.
  • Support for Monte Carlo or Bootstrap simulating the RDC and PCS Q factors.
  • Huge speedup of Monte Carlo simulations in the N-state model analysis.
  • Geometric mean and standard deviation functions added to the relax library.
  • Changes:
  • Wrote a method to store parameter data and dispersion curves, for the protocol of repeated CPMG analysis. This is to prepare for analysis in other programs. The method loops through the data pipes, and writes the data out. It then writes a bash script that will concatenate the data in an matrix array style, for reading and processing in other programs. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • Added to write out a collection script for χ2 and rate parameters. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • In the collection bash script, removes spins which have not been fitted. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • Fix for use of " instead of ' in bash script. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • Adding option to minimise class function, to perform Monte Carlo error analysis. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • Printout when minimising Monte Carlo simulations. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • Added additional test to system test Relax_disp.test_bug_23186_cluster_error_calc_dw() to prove that Bug #23619 is invalid. Bug #23619: Stored chi2 sim values from Monte Carlo simulations does not equal normal chi2 values.
  • Small fix for the shell script to collect data files, and not use the program "column" in the end. The line width becomes to large to handle for column. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • Added a unit test that triggers the bug. Test added in test_delete_spin_all, and can be accessed with: relax -u _pipe_control.test_spin. Bug #23642: When deleting all spins for a residue, an empty placeholder is where select=True.
  • Added sample data and analysis script, that will eventually show that there is not much difference in the sample statistics used for comparing the output of two very similar datasets. This is a multiple comparison test with many T-tests at once, where the familywise error is controlled by the Holm method. Even if the values are close to equal, and within the standard deviation, this procedure will reject up to 20% of the null hypothesis. This is not deemed as a suitable method. Bug #23644: monte_carlo.error_analysis() does not update the mean value/expectation value from simulations.
  • Added Monte Carlo simulations to the N_state_model.test_absolute_T system test. This is to demonstrate a failure of the simulations in certain N-state model setups.
  • Added a missing call to monte_carlo.initial_values in the N_state_model.test_absolute_T system test. This fixes the N_state_model.test_absolute_T system test, showing that there is not a problem with the Monte Carlo simulations.
  • Added Monte Carlo and Bootstrap simulation support for the RDC and PCS Q factor calculations. The pipe_control.rdc.q_factors() and pipe_control.pcs.q_factors() functions have been modified to support Monte Carlo and Bootstrap simulations. The sim_index argument has been added to allow the Q factor for the given simulation number to be calculated. All of the Q factor data structures in the base data pipe now have *_sim equivalents for permanently storing the simulation values. For the simulation values, all the warnings have been silenced.
  • Added simulation support for the RDC and PCS Q factors in the N-state model analysis. This is for both Monte Carlo and Bootstrap simulation. The simulation RDC and PCS values, as well as the simulation back calculated values are now stored via the minimise_bc_data() function of specific_analyses.n_state_model.optimisation in the respective spin or interatomic data containers. The analysis specific API methods now send the sim_index value into minimise_bc_data(), as well as the pipe_control.rdc.q_factors() and pipe_control.pcs.q_factors() functions.
  • Silenced a warning in the N-state model optimisation if the verbosity is set to zero. This removes a repetitive warning from the Monte Carlo or Bootstrap simulations.
  • Huge speed up for the Monte Carlo simulations in the N-state model analyses. This speed up is also for Bootstrap simulations and the frame order analysis. The change affects the monte_carlo.initial_values user function. The alignment tensor _update_object() method was very inefficient when updating the Monte Carlo simulation data structures. For each simulation, each of the alignment tensor data structures were being updated for all simulations. Now only the current simulations is being updated. This speeds up the user function by many orders of magnitude.
  • Added functions for calculating the geometric mean and standard deviation to the relax library. These are the geometric_mean() and geometric_std() functions of the lib.statistics module. The implementation is designed to be fast, using numpy array arithmetic rather than Python loops.
  • Created a simple unit test for the new lib.statistics.geometric_mean() function.
  • Added a unit test for the new lib.statistics.geometric_std() function.
  • Made a summarize function to compare results. Task #7826: Write an Python class for the repeated analysis of dispersion data.
  • Bugfixes:
  • Fix committed, where an empty spin placeholder has the select flag set to False. Bug #23642: When deleting all spins for a residue, an empty placeholder is where select=True.

New in relax 3.3.8 (Apr 2, 2015)

  • 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.

New in relax 3.3.7 (Mar 13, 2015)

  • 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.
  • 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 (2Da2(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.
  • 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, 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, 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, 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 (2Da2(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, the sequence.read failure with CSV files. It uses a truncated version of the CSV data file attached to sr #3219.
  • Converted the lib.sequence.validate_sequence() to the checking function design. This is the checking function design documented at 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, 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, 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, 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, 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, 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, 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 2Da2(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, 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.

New in relax 3.3.6 (Feb 5, 2015)

  • This is a minor feature and bugfix release. It includes the addition of the new structure.sequence_alignment user function which can use the 'Central Star' multiple sequence alignment algorithm or align based on residue numbers, saving the results in the relax data store. The assembly of structural coordinates 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 has been redesigned around this new user function. It will use any pre-existing sequence alignments for the molecules of interest, use no sequence alignment if only structural models are selected, and default to a residue number based alignment if the structure.sequence_alignment user function has not been used. Bug fixes include a system test failure on Mac OS X, and Iinf parameter text files and Grace graphs are now produced by the relaxation curve-fitting auto-analysis for the inversion recovery and saturation recovery experiment types.

New in relax 3.3.5 (Jan 28, 2015)

  • 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.
  • 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.spectrum.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 spectrum.error_analysis_per_field user function. 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 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 spectrum.sn_ratio user function smaller.
  • Added two new system tests Spectrum.test_deselect_sn_ratio_all and Spectrum.test_deselect_sn_ratio_any. These test the deselect.sn_ratio user function, 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 deselect.sn_ratio user function. 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 dx.map user function. 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 χ2 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 this thread. 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: Error calculation of individual parameter δω 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: Error calculation of individual parameter δω from Monte-Carlo, is based on first spin.
  • Added additional test for the r2a parameter. Bug #23186: Error calculation of individual parameter δω 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: Deleting residue in GUI, and then open spin viewer crashes relax.
  • Added test for spin independent error of kAB. Bug #23186: Error calculation of individual parameter δω 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: 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 χ2 distribution. 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 χ2 Gauss distribution as found by best fit. 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 χ2 Gauss distribution. 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 χ2 distribution. 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 χ2 distribution. 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: 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: 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: 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: 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: Implement Monte-Carlo simulation whereby errors are generated with width of standard deviation or residuals.
  • Extended the monte_carlo.create_data user function, 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: 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: 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: 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: 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: 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 monte_carlo.create_data user function. 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

New in relax 3.3.4 (Dec 4, 2014)

  • 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, created using latex2html. The links all require double quotes, and some a trailing '/'. The links fixed are [1], [2] and [3].
  • Removed the repository backup file text from the relax manual. The gzipped repository dump file has not been created by Gna! for many, many years. The problem was identified by the W3C link checker.
  • Updated all of the [4] 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 [5]. 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 task #7415 as the Relax_sym.tar.gz file. They were created for the formula I0(1 - e−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 attached to 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 [6]. 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 [7].
  • Created the Relax_fit.test_saturation_recovery system test. This follows from the discussion of [8].
  • 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, I∞].
  • 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 target_functions.relax_fit_wrapper.Relax_fit_opt 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, http://www.nmr-relax.com/api/3.3/target_functions.relax_fit-module.html#d2func_exp d2func_exp], jacobian_exp, and jacobian_chi2_exp. And all of the target_functions.relax_fit_wrapper.Relax_fit_opt 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 I∞ 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 target_functions.relax_fit_wrapper.Relax_fit_opt 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(t) = I∞(1 - e-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 I∞ 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 I∞ 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 target_functions.relax_fit_wrapper.Relax_fit_opt 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) = I∞ - I0e-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 I∞ 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 I∞ parameter. The Rx and I∞ 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 [9]. 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 target_functions.relax_fit_wrapper.Relax_fit_opt 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 [10].
  • 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 [11].
  • Created the State.test_bug_23017_ieee_754_multidim_numpy_arrays system test. This is to catch bug #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.frame_order user function.
  • Bugfixes:
  • Bug fix for the pymol.view user function for when no PDB file exists. The 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, 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.

New in relax 3.3.3 (Nov 24, 2014)

  • 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 Relax releases, Relax release descriptions, Relax release metadata, Relax release features, Relax release changes, Relax release bugfixes, 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: 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, DOI: 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 http://www.nmr-relax.com/api/3.3/lib.geometry.vectors-module.html#vector_angle_complex_conjugate 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 .
  • 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_angles 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. 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. 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, 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 function, 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).

New in relax 3.3.2 (Nov 14, 2014)

  • Features:
  • Many improvements for the HTML version of the manual.
  • 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. 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 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. 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 χ2 values, when creating a dx_map. Task #7860: When dx_map is issued, create a parameter file which maps parameters to χ2 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 χ2 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 χ2 value. Bug #22754: The minimise.calculate() does not calculate χ2 value for clustered residues. Task #7860: When dx_map is issued, create a parameter file which maps parameters to χ2 value.
  • Renamed test scripts and files for producing surface χ2 plots.
  • Renamed sample scripts making surface maps.
  • Added scripts to make surface plots of spin independents parameters δω and Ra2.
  • Added example surface χ2 values for plots. Task #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 user function, to specify the creation of a parameter and associated χ2 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 user function with points, implemented the writing out of parameter file, with associated calculated χ2 values.
  • Improved the feedback in the User_functions.test_structure_add_atom GUI 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 χ2 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 χ2 value. For each map, it creates a projected 3d map of the parameters and the χ2 value, and a heat map for the contours. It also scatters the minimum χ2 value, the 4 smallest χ2 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: 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 χ2 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, 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, 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: 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.sectioning 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, 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, 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, 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 list node. The matching xml_to_object() function 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, 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, 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 Ra2, 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 module 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 will hopefully fix the horrible formatting whereby all text is wrapped in the HTML tags text.
  • 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 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, 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, 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: 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, 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, 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, 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, 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, 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, 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, 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, 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 .

New in relax 3.3.1 (Oct 10, 2014)

  • 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_error() 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 catch 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 .
  • 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 .
  • 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.

New in relax 3.3.0 (Sep 23, 2014)

  • 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Moved the creation of special numpy structures outside target function. 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: 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Made it easier to switch between single and cluster reporting in profiling script. 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: 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: 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: 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: 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Changed all the creation of special numpy arrays to be of float64 type. 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: Speed-up of dispersion models for clustered analysis.
  • Just a tiny little more speed, by removing temporary storage of chi2 calculation. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Made copies of numpy arrays instead of creating from new. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Added a self.frqs_a as a multidimensional numpy array. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Small fix for the indices to the errors and values numpy array. 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Removed dw_frq_a numpy array, as it was not necessary. 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: Speed-up of dispersion models for clustered analysis.
  • Reordered arrays for beauty of code. 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: Speed-up of dispersion models for clustered analysis.
  • Small edit to profiling script, to help bug finding. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Fixed that arrays are correctly initiated with one or zero values. 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: 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: Speed-up of dispersion models for clustered analysis.
  • Restored profiling script to normal. 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: 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: Speed-up of dispersion models for clustered analysis.
  • Yet another small improvement for the profiling script. 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: Speed-up of dispersion models for clustered analysis.
  • Fix for testing of pA in lib function, when pA is just float. 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: 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: Speed-up of dispersion models for clustered analysis.
  • Fix for testing of kex in lib function, when kex is just float. 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Added a multi-dimensional numpy array chi2 value calculation function. 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Replaced self.spins_a with self.disp_struct. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Made initialisation structures for dw. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Initial try to reshape dw faster. 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Started converting profiling script to DPL94. 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: Speed-up of dispersion models for clustered analysis.
  • Added the ei index, when creating the first dw_mask. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Reordered how the structures dw init structures are created. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Clearing the dw_struct before calculation. 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: Speed-up of dispersion models for clustered analysis.
  • Inserted temporary method to switch for profiling. Task #7807: Speed-up of dispersion models for clustered analysis.
  • First try to speed-up the old dw structure calculation. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Simplified calculation. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Yet another try to implement a fast dw structure method. 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: Speed-up of dispersion models for clustered analysis.
  • Renamed dw temporary structure to generic structure. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Restructured the calculation of R20A and R20B to the most efficient way. 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Implemented masked replacement if fact is less that 1.0. 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Removed the creation of an unnecessary structure by using numpy multiply. 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: Speed-up of dispersion models for clustered analysis.
  • Copied profiling script for CR72 to B14 model. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Modified profiling script for the B14 model. 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: 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: Speed-up of dispersion models for clustered analysis.
  • Changed the target function to handle the B14 model for faster numpy computation. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Changed unit test for B14 to match numpy input requirement. 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: Speed-up of dispersion models for clustered analysis.
  • Comment fix for finding when E0 is above 700 in lib function of B14. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Removed use of "asarray", since the variables are already arrays. 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. speeed-up. 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: 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Changed profiling script to send dw as original parameters to the lib function B14. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Copied profiling script for CR72 model to TSMFK01 model. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Modified profiling script to be used for model TSMFK01. 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Trying to move some of the structures into its own part. 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Moved the expansion of frqs out of for loops. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Documentation fix for description of input arrays to lib functions. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Converted TAP03 model to use multi dimensional numpy arrays. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Made dw in unit tests of TAP03 be of numpy array. 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: 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: Speed-up of dispersion models for clustered analysis.
  • Added model MODEL_TSMFK01 also get self.tau_cpmg calculated in init part. 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: Speed-up of dispersion models for clustered analysis.
  • Fix for sending in dw as numpy array in unit tests of model TP02. 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: 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: Speed-up of dispersion models for clustered analysis.
  • Made the NOREX model a faster numpy array calculation. 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Fix for sending in dw as numpy array in unit tests of model MP05. 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: 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: Speed-up of dispersion models for clustered analysis.
  • Fix for sending in number of points in unit tests of model LM63. Task #7807: Speed-up of dispersion models for clustered analysis. 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Changed linked matrix/vector inner products into chained dot expressions. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Wrote the essential dot matrix up to be initiated earlier. 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: Speed-up of dispersion models for clustered analysis.
  • Turned Mint vector into a 7,1 matrix, so dimensions fit with evolution matrix. 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: 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Made the dot evolution structure faster for NS CPMG 2-site 3D. 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: Speed-up of dispersion models for clustered analysis.
  • Small fix for the dot method. But the out argument does not work. 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: 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Various index fixes, after the data structures have been reordered. 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Restructured frqs_H to higher dimension in target function. 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: Speed-up of dispersion models for clustered analysis.
  • Removed looping over spin and frequencies for model MMQ CR72. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Temporary removed check for dw = 0.0 in MMQ CR72. Task #7807: Speed-up of dispersion models for clustered analysis.
  • Removed number of points to be parsed to model MMQ CR72. 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: Speed-up of dispersion models for clustered analysis.
  • Changed MMQ CR72 to use multi dimensional data. 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.
  • Changed the reshaping of dw and dwH, since it is not dependent on experiment. 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: Speed-up of dispersion models for clustered analysis.
  • Added missing instances of cleaning the data. 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: 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: 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: 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: 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: Speed-up of dispersion models for clustered analysis.

New in relax 3.1.5 (Feb 5, 2014)

  • 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 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, 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. The problem is that the overfit_deselect() method was deselecting all spins with two data points or less rather than one or less.

New in relax 3.1.4 (Feb 1, 2014)

  • 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, the structure.write_pdb user function creating an incorrect MASTER record. This hence also catches bug #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, 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 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, 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, 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 and bug #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 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 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.

New in relax 3.1.3 (Jan 17, 2014)

  • 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.

New in relax 3.1.2 (Jan 14, 2014)

  • 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 sr #3044 - load spins from Sparky list.
  • Created the Relax_disp.test_bug_21460_disp_cluster_fail system test. This is to catch bug #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 - 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.

New in relax 3.1.1 (Dec 11, 2013)

  • 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

New in relax 3.1.0 (Nov 29, 2013)

  • 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*(2NM) to (inc2)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

New in relax 3.0.2 (Nov 27, 2013)

  • 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 - 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.

New in relax 3.0.1 (Oct 19, 2013)

  • 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 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 in relax, which is really a fix for an upstream minfx (https://gna.org/projects/minfx/) bug (bug #21090).
  • Created the Mf.test_bug_21079_local_tm_global_selection system test. This is to catch bug #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 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.
  • Addded 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.
  • Fix for bug #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. 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. 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. 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. 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/index.php?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/index.php?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/index.php?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 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. 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.

New in relax 3.0.0 (Aug 8, 2013)

  • 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 .
  • 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. 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 reported by Mengjun Xue . 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).
  • 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - support for NMRPipe seriesTab format *.ser.
  • Flag change added to reading of NMRPipe SeriesTab. Progress sr #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 - support for NMRPipe seriesTab format *.ser.
  • Fixed wrong reference to Sparky format. Progress sr #3043 - support for NMRPipe seriesTab format *.ser.
  • Modfied the intensity list to handle intensities for all spectra per spin. Progress sr #3043 - support for NMRPipe seriesTab format *.ser.
  • Fixed the extraction of NMRPipe seriestab data in pipe_control.spectrum.read(). Progress sr #3043 - support for NMRPipe seriesTab format *.ser.
  • Fix for handling reading spin of type heteronuc='NE1' and proton='HE1'. Progress sr #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 - support for NMRPipe seriesTab format *.ser.
  • Replacing a pointer-reference structure to an empty creation of list of lists. Progress sr #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 - support for NMRPipe seriesTab format *.ser.
  • Added system test for reading of a multi column formatted NMRPipe seriesTab file. Progress sr #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 - support for NMRPipe seriesTab format *.ser.
  • Made it possible to autogenerate spectrum ID's, if spectrum_id='auto'. Progress sr #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 - support for NMRPipe seriesTab format *.ser.
  • Moved checks for matching length of spectrum IDs and intensities columns. Progress sr #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 - 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 - support for NMRPipe seriesTab format *.ser.
  • Added GUI description for when supplying 'auto' to the spectrum_id. Progress sr #3043 - support for NMRPipe seriesTab format *.ser.
  • Added a stub GUI describtion in the File formats, for NMRPipe seriesTab. Progress sr #3043 - support for NMRPipe seriesTab format *.ser.
  • Fix for two spaces are used after a period in documentation. Progress sr #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 - the failure of the consistency testing analysis. This was reported by Mengjun Xue . 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 - the infinite and NaN data in Bruker DC files. This was reported by Mengjun Xue . 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. 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 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. Solution found - 'software' was not mentioned in _init_.py, and failed at import.
  • Partial fix for bug #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. 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, 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

New in relax 2.2.5 (Mar 25, 2013)

  • 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 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 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.

New in relax 2.2.4 (Mar 18, 2013)

  • 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

New in relax 2.2.3 (Mar 12, 2013)

  • Features:
  • Added the mol_name_target argument to the structure.load_spins user function. This allows spins from different molecules to be placed together in the same molecule container in the relax data store.
  • Addition of two new user functions - structure.add_model and structure.rmsd.
  • Created the structure.web_of_motion user function. This is used to create a special PDB file which represents the atomic motions between different structural models. Identical atoms of the selected models are concatenated into one model, within a temporary internal structural object, and linked together using PDB CONECT records.
  • Better PDB support in the internal structural object with: Improvements and fixes in reading/writing, an update of the format to version 3.30, and faster PDB parsing.
  • Creation of two new modules for better PDB support - generic_fns.structure.pdb_read and generic_fns.structure.pdb_write.
  • Improvements to the structure.find_pivot user function including the addition of the func_tol argument to better control the simplex optimisation and the use of the logarithmic barrier function to prevent the pivot from heading to infinity when the solution is a line.
  • Initialised a new package called 'lib' - this will in the future be an extensive collection of functions, methods, classes, objects, etc. useful for the study of all types of molecular dynamics.
  • Line wrapping has been turned on in the relax controller in the GUI so that all text is visible.
  • Changes:
  • The relax intro text now includes the repository URL for checked out code. This is for preserving better debugging and logging information, so that it is clear where the code comes from.
  • Created the Structure.test_load_spins_mol_cat system test. This will be used to test a new 'mol_name_target' argument to the structure.load_spins user function.
  • Created the Structure.test_delete_multi_pipe system test. This is to check that the structure.delete user function is operating on a single data pipe.
  • Updated the Freecode instructions in the release checklist document.
  • Created the simple Structure.test_delete_empty system test. This is to demonstrate a failure of the structure.delete user function when no structural data is present.
  • Added a printout to structure.delete for when no structures are present.
  • Created the Structure.test_rmsd system test. This test checks the currently unimplemented structure.add_model and structure.rmsd user functions.
  • The structural API num_molecules() method can now handle no data being present.
  • Implemented the structure.add_model user function.
  • Added some more checks to the Structure.test_rmsd system test.
  • Modified the structure.add_model calls in the Structure.test_rmsd system test to include model nums.
  • Added the 'model_num' argument to the structure.add_model user function.
  • Modified the structure.add_atom user function to allow the position argument to be a rank-2 array. This allows a different coordinate for each model to be specified.
  • Spun out the atomic_rmsd() and calc_mean_structure() functions into their own module. They were previously in the generic_fns.structure.superimpose module but are now in the new generic_fns.structure.statistics module.
  • Added checks for the atomic information to the Structure.test_rmsd system test. This demonstrates a failure of structure.add_atom user function when specifying different positions for the different models.
  • Docstring addition for the generic_fns.structure.statistics.atomic_rmsd() function.
  • Implemented the structure.rmsd user function.
  • Fixes for the Structure.test_rmsd system test - it now passes.
  • Created a new float_object argument type which is used by the 'pos' argument of structure.add_atom. A new arg_check.float_object() function has been created to handle any float object greater than rank-0.
  • Created the Structure.test_rmsd_ubi system test to better check the structure.rmsd user function. This uses the truncated ubiquitin ensemble in the test suite shared data directories. The RMSD matches the VMD 1.9.1 output.
  • Added a new module generic_fns.structure.pdb_write for generating the PDB records. This decouples the formatting code from the internal structural obect. The PDB format has been updated to version 3.30. There is one function for each PDB record, allowing this to be easily extended and kept up to date.
  • Created the generic_fns.structure.pdb_read module. This replaces the internal structural object _parse_pdb_record() method which was handling both ATOM+HETATM and CONECT records. It should allow greater flexibility in reading data out of other PDB records in the future. There is one function per PDB record type in this module.
  • Added the full 1UBQ PDB structure to the relax test-suite shared data directories. This is a small, very quick to read structure which will be used for validating the reading and writing of different PDB record types.
  • Changes to the internal structural object. The _parse_models_pdb() method has been renamed to _parse_pdb_coord() and the opening of the PDB file shifted into the base load_pdb() method. This is in preparation for better parsing of PDB files to match the main sections of the PDB format, see http://www.wwpdb.org/documentation/format33/v3.3.html.
  • Created the Structure.test_read_pdb_1UBQ to check the complete parsing of the complex PDB file. The test is currently quite basic and needs to check more of the internal structural object.
  • Better checks for the atomic data in the Structure.test_read_pdb_1UBQ system test.
  • Added a series of parse_pdb*() methods to the internal structural object. These correspond to each section of the PDB format version 3.30 http://www.wwpdb.org/documentation/format33/v3.3.html. The currently loop over the records of their section, returning the remaining PDB records. The aim is for fast parsing and breaking into sections.
  • Faster PDB parsing by the removal of the use of the re.search() function. Now line slices are directly compared instead.
  • Added some more unit tests for the generic_fns.structure.pdb_read module. These tests are not yet complete, as it is unknown what these unimplemented functions will return.
  • Completed the unit test of the generic_fns.structure.pdb_read.helix() function.
  • Implemented the generic_fns.structure.pdb_read.helix() function.
  • Created the Mf.test_bug_20531_molmol_macro_write_relaxfault system test. This is an attempt at catching bug #20531. It creates all of the m0-m9 and tm0-tm9 models, sets some parameter values, and then attempts to create all of the Molmol macros, PyMOL macros, Grace plots and parameter text files as present in the auto_analysis.dauvergne_protocol module.
  • The spectrometer frequency is now set in the Mf.test_bug_20531_molmol_macro_write_relaxfault system test. This is needed for the Rex scaling.
  • The spin name, element and isotope is now set in Mf.test_bug_20531_molmol_macro_write_relaxfault. This is required in this system test so that the marco creation is not skipped.
  • Added some work-arounds for the model-free specific code for when no relaxation data is present. This is needed for the Rex scaling, as the ID of the first relaxation data set was being used to select the first frequency. As caught by the Mf.test_bug_20531_molmol_macro_write_relaxfault system test, this fails if no relaxation data is present.
  • Expanded the unit test of the generic_fns.structure.pdb_read.sheet() function.
  • Implemented the PDB SHEET record parsing function generic_fns.structure.pdb_read.sheet().
  • Extended the PDB ATOM record reading unit test to be of 80 characters in length, as per the PDB definition.
  • Created unit tests for the generic_fns.structure.pdb_write module. This currently covers the atom(), helix() and sheet() functions (the last 2 are not yet implemented).
  • Implemented the PDB HELIX record writing function generic_fns.structure.pdb_write.helix().
  • Improved PDB writing capabilities. The functions of the generic_fns.structure.pdb_write module now all use the _handle_none() function to avoid the text "None" from appearing in the PDB file and _record_validate() to be sure the record has not been corrupted with bad input causing it to be either less or greater than 80 characters.
  • The Mf.test_bug_20531_molmol_macro_write_relaxfault system test now catches bug #20531. This now uses the results file attached to the bug report https://gna.org/bugs/?20531.
  • Implemented the PDB SHEET record writing function generic_fns.structure.pdb_write.sheet().
  • Created a unit test for the generic_fns.structure.pdb_write.het() function.
  • Created the generic_fns.structure.pdb_write._handle_text() function. This private function is used to convert text into PDB suitable format (uppercase and values of None converted to empty strings).
  • The diffusion tensor PDB files are now conform better to the PDB standard. The HET records are now correct, only capitalised text is present in the files, and trailing whitespace to character 80 has been added.
  • Epydoc docstring formatting for the generic_fns.structure.pdb_write modules. These large changes improve the API documentation at http://www.nmr-relax.com/api/.
  • Created a unit test for the generic_fns.structure.pdb_write.model() function.
  • Added a new PDB file with 3 models and a few atoms for testing of the structure.web_of_motion user function.
  • Created the Structure.test_web_of_motion_all system test. This is to check the new structure.web_of_motion user function.
  • The structure.web_of_motion user function can now handle file objects as well as file names as input.
  • Small fixes for the Structure.test_web_of_motion_all system test.
  • Created the Structure.test_web_of_motion_12 system test to show how model sets are currently ignored.
  • Implemented the models argument for the structure.web_of_motion user function. This was previously not being used and was caught by the Structure.test_web_of_motion_12 system test.
  • Created the Structure.test_web_of_motion_13 system test. This was just to be sure that the models argument was correctly handled by the structure.web_of_motion user function.
  • The structure.find_pivot user function now accepts the func_tol argument. This is used to terminate the simplex optimisation when this function tolerance value is reached.
  • Shifted the ensemble pivot finding target function into the maths_fns package.
  • Added a sentence to the README file about the sample_scripts directory.
  • Added a document detailing the possible future layout of relax's packages.
  • The structure.find_pivot user function now uses the logarithmic barrier function. This is for constrained optimisation and requires the newest minfx code. The pivot position is constrained within a box of +/- 1000 Angstroms from zero. This is needed for when the solution is an infinite line - i.e. a rotation axis and not a pivot point. Previously the simplex optimisation would head toward + or - infinity. But now with a logarithmic barrier, the simplex algorithm can stabilise and find a point on the axis very quickly, long before reaching the edges of the box.
  • The structure.find_pivot user function now accepts the func_tol and box_limit arguments. This allows the function tolerance for the simplex optimisation to be specified, as well as the size of the box to constrain the pivot to be within.
  • Initialised the lib.geometry package. This will be a library of all mathematics functions relating to geometry.
  • Added empty packages to the unit tests for the lib and lib.geometry packages.
  • Updated the maths_fns package _all_ list.
  • Updated the test_suite.unit_tests package _all_ list to be more modern.
  • The n_state_model.number_of_states user function no longer requires the N-state model to be defined. This was only needed to update the model information, and is skipped if not set.
  • The generic_fns.structure.superimpose.find_centroid() function now prints out Euler angles as well.
  • Large improvements to the checking for all the rdc and pcs user functions. The new methods check_pipe_setup() have been added to replace all other checking. This standardises all error checking and provides much better coverage. The results is that you will be much less likely to encounter a Python traceback when something is forgotten, and will be told via a RelaxError what is missing.
  • The rdc.back_calc and pcs.back_calc user functions now warn if no data was calculated. This is to inform the user about problems at the place that they occur instead of later on with, for example, the creation of empty data files.
  • Updated the float module to handle numpy floats. This makes the floatToBinaryString() function compatible with the numpy.float16 type.
  • Removed the prune parameter from the backend of the monte_carlo.error_analysis user function. This was a dangerous parameter used to mimic the 'Trim' parameter from the Modelfree4 program. The result is bad statistics. The probable reason for the 'Trim' parameter was the failure of model-free models in the simulations, but this issue was solved using model elimination (see http://www.nmr-relax.com/refs.html#dAuvergneGooley06).
  • Created the Structure.test_read_xyz_strychnine system test to demonstrate a bug in the XYZ parser. This is for the reading of XYZ structure files.
  • Created the lib.text package for text manipulation. The first module will be the text formatting of tables.
  • Created the lib.geometry.lines module for performing geometric operations with lines. This has one stub of a function lib.geometry.lines.closest_point() which will be used to find the closest point on a line to a given point.
  • Added the package checking unit tests for the lib package.
  • Improved the base class unit test for the package _all_ list. Subpackages are now also checked.
  • Blacklisted a number of files in the maths_fns package for the package _all_ list unit test.
  • Added a unit test for the lib.geometry package _all_ list.
  • Created a unit test for the lib.geometry.lines.closest_point() function.
  • Created the lib.text.table module. This originates from the prompt.uf_docstring module as most of that module is functions for creating formatted text tables.
  • Updated the lib package _all_ list for the lib.text package.
  • Implemented the closest_point() and closest_point_ax() functions of lib.geometry.lines. These two functions do the same thing - find the closest point on a line to any given point - but take different arguments to define the line.
  • Improved the package _all_ list base unit test by skipping all hidden files and directories.
  • Refactored the lib.text.table module. The create_table() function is now called format_table() and the table_line() function has been made private. All references to the user function tables and the relax status object have been removed and replaced by arguments to format_table().
  • The prompt.uf_docstring module now uses lib.text.table.format_table(). This significantly simplifies the module.
  • Removed a number of unused imports in prompt.uf_docstring.
  • Deleted prompt.uf_docstring.table_line() as this is now a private function of lib.text.table.
  • Fix for lib.text.table.format_table() as table_line() is now private.
  • Added the spacing argument to lib.text.table.format_table(). This removes the reference to the user function table spacing variable from this function and shifts it to the prompt.uf_docstring.create_table() function.
  • Created the framework for the unit tests of the lib.text package.
  • Created two unit tests for the lib.text.table.format_table() function.
  • Updates to the unit tests of the lib.text.table.format_table() function.
  • Many improvements to the lib.text.table module. The format_table() function now accepts arguments for text to prefix and postfix to each line,the text padding to the left and right inside the table, and the text used to separate the columns. The _blank() and _rule() private functions have been added to create distinct table elements.
  • Created the lib.text.table.MULTI_COL constant for defining cells spanning multiple columns. This is not used yet.
  • Modified the Mf.test_mf_auto_analysis GUI test to catch bug #20603.
  • 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 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. 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, 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, 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.

New in relax 2.2.2 (Feb 14, 2013)

  • 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. 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. 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. 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). 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. 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.

New in relax 2.2.1 (Feb 2, 2013)

  • 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).
  • 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.
  • Created the Structure.test_bug_20470_alternate_location_indicator system test to catch bug #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.
  • 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 - 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 sr #2998 (https://gna.org/support/?2998). CONECT records pointing to non-existent atoms can now be handled.
  • Fix for bug #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. 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 - 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.

New in relax 2.2.0 (Jan 29, 2013)

  • 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*(5N) to Ninc*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.
  • 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.
  • 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:).
  • 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. The global alignment ID data structure now has the RDC or PCS ID string correctly removed.
  • Fix for bug #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. 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. 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. 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. 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. 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. 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.

New in relax 2.1.2 (Oct 19, 2012)

  • 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.
  • 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. 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"

New in relax 2.1.1 (Sep 26, 2012)

  • 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. 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.
  • 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.
  • 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.
  • 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.
  • 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. 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.
  • 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. 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. 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 - 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 - 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 - 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. 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. 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.
  • 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 - 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, 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.

New in relax 2.1.0 (Jul 13, 2012)

  • 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.
  • 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. 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. 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.

New in relax 2.0.0 (Jun 14, 2012)

  • 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 tag. This indicates the repository version and the URL, allowing for better debugging.
  • The 'relax --version' print out now includes the full subversion info, if it is a checked out copy.
  • Improvement for the model-free auto-analysis in the GUI. After execution, the main data pipe of the analysis tab is now set to the 'final' data pipe generated by the dauvergne_protocol. This means that when switching between analysis tabs, that going back to the model-free tab will make the 'final' data pipe the current one, rather than the data pipe used to initialise the analysis.
  • Better handling of the GUI wizard termination. The _handler_close() method is now handling the close events and together with the _ok() method,both now execute the current page's on_next() method. This means that on_next() is called for all avenues for exiting the wizard. This allows the user function pages to unregister themselves with the observer objects.
  • The wizard window _cancel() method now calls the current page's on_next() method. This allows the page to clean itself up.
  • The GUI analysis pipe_deletion() method now works with pipe bundles instead of pipe themselves. This is because the analysis tabs are now associated with the bundles rather than pipes.
  • The 'bundle' arg is now functional in the model_selection user function back end.
  • Added the 'bundle_to' arg to the pipe.copy user function back end. This arg is now functional.
  • The dauverge_protocol auto-analysis now uses the new 'bundle' user function args. This is used in the pipe copying to place the newly created pipe and in the model selection, both so that all pipes created during the analysis are located within the pipe bundle reserved for that analysis.
  • The GUI user function window titles are now set to the 'title_short' value. This is because the long title can be far too long for a GUI window title!
  • The long title or synopsis is now added to the GUI user function description text as italic text.
  • Added the 'bundle' arg to the model_selection user function specification.
  • Improvements to the 'bundle' arg specification of the pipe.create user function.
  • Added the new 'bundle_to' arg to the pipe.copy user function. This will be used to associated a newly copied data pipe with a pipe bundle.
  • Added some backwards compatibility code for old GUI state files missing pipe bundles.
  • Created a GUI test for loading an old relax 1.3 save state containing GUI analyses.
  • Updated the dauvergne_protocol auto-analysis to spawn all pipes into the named bundle.
  • The generic_fns.pipes.pipe_names() function now can restrict the list of names to a specific bundle.
  • The pipe editor window now handles the pipe bundling concept. There is a new button for the pipe.bundle user function, a new column showing the pipe bundles, and the pop up menu allows pipes to be associated with bundles if not already bundled.
  • The pipe.bundle user function back end now notifies all the pipe_alteration observers of the change. This is required for proper GUI interaction.
  • Refinements to the pipe.create user function definitions.
  • The GUI analysis tabs now work with data pipe bundles rather than the original data pipe. The analysis wizard now uses the unique name for the new data pipe bundle field, and the starting data pipe defaults to 'origin'. The analysis pages show the bundle name rather than associated data pipe.
  • The pipe.delete user function is now cleaning up the data pipe bundles as needed. The deleted data pipe name is removed from any bundle it is in, and empty bundles are eliminated.
  • Implemented the generic_fns.pipes.has_bundle() function for determining if a bundle exists.
  • Modified the pipe.display user function backend to show the pipe bundles. This required the addition of the generic_fns.pipes.get_bundle() function.
  • Implemented the pipe.bundle user function, including the full description and the back end.
  • The data store is_empty() method works again - the pipe_bundles structure is now blacklisted.
  • Shifted the pipe bundle graphic and created a wizard PNG file for the GUI user function.
  • Created icons for the pipe bundle concept.
  • Implemented the generic_fns.pipes.bundle_names() function for returning a list of all pipe bundles.
  • The pipe.create user function now creates pipe bundles in the back end. The new ds.pipe_bundles dictionary is used to hold lists of pipes associated with the pipe bundle name as the dictionary keys. The 'bundle' arg is passed into the ds.add() method for storage.
  • Added the 'bundle' keyword arg to the pipe.create user function definition.
  • Preparation for the implementation of pipe bundle concept - addition of system and GUI tests. This new pipe bundling concept is simply a way of grouping data pipes together. This will be useful for: grouping and categorisation of data pipes when multiple analyses are performed, the model-free dauvergne_protocol auto-analysis will place all the data pipes it creates into one bundle, for the GUI mode analyses will be linked to pipe bundles rather than data pipes. This will allow switching data pipes to activate the correct analysis.
  • The 'verbatim' user function description elements are now properly formatted in the GUI. These elements now use the font.modern_small formatting to have fixed-width characters.
  • Table formatting improvements for the GUI user function descriptions.
  • Improved the whitespace formatting of the spin data write out of relax_io.write_spin_data(). Now the column sizes are dynamically changed to match the data being written out. This is to fix the ugly write outs for when the name of the molecule is very long.
  • Replaced all mention of 'arguments' from the user function docstrings with human readable text.
  • The state.load user function will now recreate the GUI tabs. For this, the new state_load observer object has been created. The GUI analysis load_from_store() is registered with this object. And to prevent fatal racing in the GUI, the state.load user function operation is now synchronous. The state.load and state.save file arg defaults are now also set to 'state.bz2'.
  • Removed a printout in the API documentation compilation.
  • All of the user_function.object.Table instances in the specific code descriptions are now private. This hides them from the specific API, and allows the unit tests to pass.
  • Removed the vertical lines in the tables of the prompt UI help strings. The tables now look much more professional.
  • The GUI user functions now use the new Desc_container and Table user function classes. The descriptions for the user function wizard pages are now being taken from the new user_functions.objects.Desc_container objects, lists of which are the user function definition 'desc' objects. The tables via the user_functions.objects.Table object is being formatted as in the prompt user function help text, though without vertical lines. The lists and itemised lists are currently formatted the same as in the prompt UI.
  • The Desc_container.element_loop() method can now yield the title too, if asked.
  • Better spacing in the list of tables section of the PDF user manual.
  • Complete rewrite of the docs.latex.fetch_docstrings module. This is a significant simplification for the creating of the user function documentation within the user manual. Some of the long list of changes include: The file docs/latex/fetch_docstrings.py is no longer an executable script and now operates solely as a Python module; all of the original docstring section parsing code has been eliminated; the searching for user functions in the prompt UI namespace has been replaced; the new user function definitions are directly used and the documentation for each user function section generated via the self.build_() methods; the complicated ascii table parsing and rebuilding into a LaTeX table has been eliminated; the self.write_() methods have been created for building the various sections of the user function documentation (paragraphs, verbatim text, prompt examples, lists, itemised lists, and tables); tables are no longer duplicated, triplicated, etc. and instead a reference to the first instance of the table is inserted - this is a significant space saver as one of the copies of the multi-page X11 colour table is removed.
  • Renamed the Uf_tables.add_table() 'title' arg to 'caption', and added the new 'caption_short' arg. The name change is fairly logical, as this is a caption. The 'caption_short' arg will be used for the list of tables in the LaTeX user manual.
  • The Molmol colour table is no longer a LaTeX longtable in the user manual.
  • The prompt UI table creation is now using the Table.spacing variable for adding empty lines between rows.
  • The Monte Carlo description now uses an itemised list for the listing of the steps involved.
  • The prompt UI help string construction code is now handling the new Uf_tables singleton.
  • Added a check to Uf_tables.get_table() to make sure that the table corresponding to the label exists.
  • Added a check to Desc_container.add_table() to make sure the label is a string.
  • All of the user function documentation tables now use the new Uf_tables singleton structure. The special properties for the colour module tables (longtables and now spacing) have been added as well.
  • Created a new way of defining and inputting tables into the user function descriptions. This introduces the user_functions.objects.Table for holding all the table data and metadata, and the user_functions.data.Uf_tables singleton object for holding all the tables. This design will allow more metadata (for example using longtables in the LaTeX user manual) to be specified. The singleton collection of tables with unique labels will also allow the elimination of duplicated tables in the PDF and HTML user manuals. The new table title metadata will also be used for the table headings in the user manuals.
  • Converted a number of add_verbatim() calls to add_item_list_element() with items of None. This allows for proper formatting and indentation of equations. In the future, a possible add_equation() method might be added to provide text and LaTeX representations of equations in the user function documentation.
  • Itemised lists without items are now supported in the prompt help strings. This is to mimic the LaTeX behaviour to allow lists with no 'bullets'.
  • Shifted the prompt examples to the end of the description for the value.display user function.
  • Converted all of the user functions to use the Desc_container class design. All of the user function descriptions, prompt examples, and additional documentation scattered around the relax sources have been merged into the Uf_info.desc list of Desc_container objects.
  • The 'prompt_examples' and 'additional' user function structures are no longer passed into the prompt objects.
  • Removed the 'prompt_examples' and 'additional' variables from the Uf_info containers. These have been superseded by the Desc_container objects.
  • Prompt examples are now followed by 2 newlines in the prompt help strings. This restores much of the original formatting for these examples.
  • Added support for no spacing in tables for the prompt help strings. The Desc_container.add_table_titles() method now accepts and stores the 'spacing' arg. This is passed all the way into the prompt help system to format the tables with.
  • Added a check in the prompt help _build_doc() method for the user function description. This should, together with the _build_doc() unit tests, help to uncover all unconverted user function 'desc' variables.
  • Created an algorithm for wrapping table columns to fit within status.text_width. This is for the prompt user function docstring tables. The columns are now dynamically wrapped so that the table will not be wider than the given width. For example the value.set user function description table would normally have a total width of 238 characters, but this now fits within one screen of text under all operating systems.
  • Created two unit tests for the _build_doc() methods of the prompt user function objects. This is for the prompt user function class objects and the user function objects themselves. The _build_doc() methods are used to generate the prompt help strings.
  • Converted all of the OpenDX user functions to the new Desc_container design. This tests out the use of 'additional' outside documentation.
  • Improved the user function class prompt help string. The user function list now uses bold text, and the user function title is also now given.
  • The prompt help string for user function classes now includes info about the member user functions.
  • The Uf_info.uf_loop() method can now restrict the looping over a given user function class.
  • Large improvements to the prompt help strings for the user function classes. These are now formatted with section using bold text.
  • The user function default args prompt help string text is now wrapped.
  • Removed the starting newline from the user function prompt help string.
  • Converted the calc, grid_search and minimise user function descriptions to use Desc_container.
  • Tables in the user function descriptions are now formatted for the prompt help strings. This is for the Desc_container objects. The list of lists are now converted to the text format originally used for the user function docstrings.
  • Converted all of the alignment tensor user functions to the new Desc_container design.
  • Itemised lists and verbatim text are now formatted properly for the prompt help strings.
  • Converted align_tensor.init to the Desc_container object design to test itemised lists.
  • The Desc_container object now supports itemised lists.
  • Lists are now formatted for the prompt user function help strings from the Desc_container objects.
  • Converted the align_tensor.display user function to the new Desc_container design. This is to test out the list generation.
  • The Desc_container.add_list_element() method now groups list elements together.
  • Converted the prompt user function objects to use the new Desc_container objects for the help strings.
  • Started to redesign the user function definition descriptions. The desc object has been converted into a list which will contain instances of the new Desc_container class. This class will hold the description information as blocks of text, including unformatted paragraphs, verbatim text, lists, tables, and relax prompt examples. The object has a number of methods used for inputting all of the information, as well as extracting it. The information in the Desc_container object is not formatted, for example tables will be stored as lists of lists. This will remove the need for parsing list, tables, verbatim text, etc. by the docs.latex.fetch_docstrings module. But these will need to be recreated for the prompt help strings, for the GUI user function descriptions, and for the user manual.
  • Converted the align_tensor.copy user function description to the new design. This is a test for the implementation of the description abstraction through the Desc_container objects. The 'desc', 'additional', and 'prompt examples' will all be merged into one 'desc'structure.
  • Converted a few user functions to use the special "spin ID" arg type.
  • Converted the structure.vectors spin_id arg to the special "spin ID" type. This is to improve vector loading in the GUI.
  • Increased the size of the unit vector loading wizard in the model-free analysis. This now matches the structure.read_pdb user function size and allows it to fit.
  • The min length is now handled much better in the Combo_list GUI input element.
  • The GUI user function object create_wizard() method now returns True upon success. This is needed for calls to these objects.
  • The GUI user functions now called by the results viewer window now have the parent set to this window.
  • The GUI user function page update_args() method now has a docstring and returns True when successful.
  • Rearranged the spin.name args and converted the spin ID to the special spin ID type.
  • Prevention of multiple RelaxErrors from the user functions. The update_args() method returns False if an error occurred on updating the list of choices for an arg. This is now caught by all parts of the code where it is called, preventing further execution.
  • Improvements to the structure.load_spins user function definition. The spin_id arg now uses the special 'spin ID' arg type for the spin ID GUI input element.
  • A number of improvements for the spin ID GUI input element. This includes: the use of SetValue() for strings not in the list of choices; defaulting the choices to ['@N', '@C', '@H', '@O', '@P'] if not supplied; a tooltip white space fix; and removal of the None element in the list of choices, as this is not a read only box.
  • Increased the size of the spin loading wizard to match that of structure.read_pdb.
  • The Value GUI input element UpdateChoices() method now handles non-selection strings in the ComboBox. The SetStringSelection() method is now only used when the combo default is one of the choices, and SetValue() when not in the list of choices.
  • Decreased the amount of waiting time in the GUI interpreter flush() method. This will allow speed ups in certain parts of relax (for example some GUI tests).
  • The GUI test _execute_uf() base method now allows the wizard run() method to be executed. This gives a better work out of the user functions and matches more closely to what a user will experience.
  • Deleted a ton of now unused and useless code from gui.analyses.results_analysis.
  • Print statement conversions to function calls for Python 3.x. All non-debugging print statements are now function calls. The debugging printouts have been deleted.
  • Complete redesign and creation of the 2nd version of the relax XML format for save and results files. This is a BIG set of changes! It includes the following: the XML files now have the new 'file_version' attribute within the 'relax' XML element, this is now set to '2', and if unset it is assumed that the file version should be 1; the file_version integer value is now propagated through all of the from_xml() methods so it can be passed into the data.relax_xml.xml_to_object() function - this prevents a mixture of v1 and v2being assumed for different parts of the XML; an XML namespace fix - the xmlns="http://www.nmr-relax.com" attribute is now finally visible; the data.relax_xml.object_to_xml() function has been added for creating the new relax XML syntax - this will handle and convert many more basic Python object types into IEEE-754 byte arrays, for example lists and dictionaries of floats, or numpy vectors and matrices, and this function is now used throughout the code base for converting Python objects to XML; the data.relax_xml.xml_to_object() function has been expanded to match the functionality of data.relax_xml.object_to_xml(); the Python object XML elements now have the 'type' attribute indicating the Python object type - this is important for the processing of the file, especially for handling all types of numpy structures; the Python object value is now stored in a sub XML element called '' - if it is a float, or is a simple type which contains floats, then the sub XML element 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 tempe

New in relax 1.3.16 (May 12, 2012)

  • This is a major bug fix release focusing on memory usage, performance, and IO. The parallised model-free optimisation code (for running on clusters/grids using the multi-processor package) was causing relax to crash on 32-bit systems due to the system running out of virtual memory. The new version should only require about a third of the memory of relax 1.3.13 (see https://mail.gna.org/public/relax-users/2012-03/msg00037.html). The parts of relax dealing with atomic or spin specific data (reading of spin systems from PDB files, reading and writing of spin specific data, etc.) have been rewritten for efficiency and should now be many orders of magnitude faster for certain work loads. There have also been large improvements to the multi-processor framework, specifically the creation of a public API and a reference implementation. In addition there are improvements for IO capture on both the uni-processor and mpi4py-processor fabrics for relaying slave messages back to the master, better integration with the GUI and compatibility with the logging and teeing command line flags. Other changes include expansion of the relax information print out, support for numpy data structures in save files, and the addition of the rdc.delete and pcs.delete user functions. Feel free to upgrade if you would like the benefits of this new version.

New in relax 1.3.15 (Apr 26, 2012)

  • This is a major bug fix release focusing on memory usage, performance, and IO. The parallised model-free optimisation code (for running on clusters/grids using the multi-processor package) was causing relax to crash on 32-bit systems due to the system running out of virtual memory. The new version should only require about a third of the memory of relax 1.3.13 (see https://mail.gna.org/public/relax-users/2012-03/msg00037.html). The parts of relax dealing with atomic or spin specific data (reading of spin systems from PDB files, reading and writing of spin specific data, etc.) have been rewritten for efficiency and should now be many orders of magnitude faster for certain work loads. There have also been large improvements to the multi-processor framework, specifically the creation of a public API and a reference implementation. In addition there are improvements for IO capture on both the uni-processor and mpi4py-processor fabrics for relaying slave messages back to the master, better integration with the GUI and compatibility with the logging and teeing command line flags. Other changes include expansion of the relax information print out, support for numpy data structures in save files, and the addition of the rdc.delete and pcs.delete user functions. Feel free to upgrade if you would like the benefits of this new version.

New in relax 1.3.14 (Mar 21, 2012)

  • This is a major bug fix release focusing on memory usage, performance, and IO. The parallised model-free optimisation code (for running on clusters/grids using the multi-processor package) was causing relax to crash on 32-bit systems due to the system running out of virtual memory. The new version should only require about a third of the memory of relax 1.3.13 (see https://mail.gna.org/public/relax-users/2012-03/msg00037.html). The parts of relax dealing with atomic or spin specific data (reading of spin systems from PDB files, reading and writing of spin specific data, etc.) have been rewritten for efficiency and should now be many orders of magnitude faster for certain work loads. There have also been large improvements to the multi-processor framework, specifically the creation of a public API and a reference implementation. In addition there are improvements for IO capture on both the uni-processor and mpi4py-processor fabrics for relaying slave messages back to the master, better integration with the GUI and compatibility with the logging and teeing command line flags. Other changes include expansion of the relax information print out, support for numpy data structures in save files, and the addition of the rdc.delete and pcs.delete user functions. Feel free to upgrade if you would like the benefits of this new version.

New in relax 1.3.13 (Nov 15, 2011)

  • In addition to many bugfixes, there are improvements to the frame order theory, N-state model analysis, handling of RDC and PCS values, a number of new user functions for structure creation, displacement, and superimposition and for model-free result visualisation in PyMOL, and a redesign of the auto-analyses to have all input data pre-loaded into a relax data pipe for support of non-protein organic molecules in the dauvergne_protocol auto-analysis.

New in relax 1.3.11 (Aug 14, 2011)

  • The major features include the integration of relax and the BMRB via the reading and writing of the BMRB NMR-STAR format files for model-free analyses, support for reading the XYZ 3D structure files used in organic chemistry, significant GUI improvements, and better support for the Bruker Protein Dynamics Centre (PDC) files.
  • In addition a large number of bugs have been resolved.
  • All together, this is a large release consisting of just under 2000 individual changes.

New in relax 1.3.10 (Feb 21, 2011)

  • 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.

New in relax 1.3.9 (Jan 27, 2011)

  • This is a major feature release which introduces a new graphical user interface.
  • This GUI provides easy access to a subset of relax's features - the R1 and R2 relaxation rate curve-fitting, NOE calculations, and the fully automatic model-free analysis of the dauvergne_protocol module (d'Auvergne and Gooley, 2008, JBNMR, 40, 121).

New in relax 1.3.8 (Jan 21, 2011)

  • This is a minor bugfix release in preparation for the impending merger of relaxGUI.
  • New features include a sample script for creating CSV files from model-free results for import into spreadsheet programs, extensive system testing of all model-free models, fixes for a system test on 32-bit GNU/Linux, and a fix for running scripts with certain versions of Python.

New in relax 1.3.7 (Jan 11, 2011)

  • The fatal bug is that the prolate diffusion tensor, when initialized with Da set to zero, will be converted to an oblate tensor.
  • Other bugs fixed include support for volume integration together with replicated spectra, the scipy dependency now being optional, 32-bit GNU/Linux test suite fixes, and better support for the reading of old version 1.2.x results files.
  • An additional feature is that the relax packages/modules can now be imported and used outside of relax.

New in relax 1.3.6 (Jan 3, 2011)

  • This is a major feature release which includes many bug fixes and a security fix.
  • Major additions include the addition of 9 new frame order models, execution locking, support for CCPN Analysis 2.1 peak lists, Monte Carlo simulations for the N-state model, optimisation of the Ln3+ position in the N-state model, weighting of RDCs and PCSs during optimisation, and no longer using execfile() closing a security hole.

New in relax 1.2.15 (Nov 30, 2008)

  • This is a very minor bugfix release that solves issues with the value.write() user function and with error analysis when performing relaxation curve-fitting.