This is a major bugfix release.  The release fixes multiple issues
with the relax GUI and with the relaxation dispersion analyses.
Please see the notes below for details.

For the official, easy to navigate release notes, please see .

The new relax versions can be downloaded from If binary distributions are
not yet available for your platform and you manage to compile the
binary modules, please consider contributing these to the relax
project (described in section 3.6 of the relax manual,

The full list of changes is:

    * N/A

    * Mac OS X distribution file: Fixes for the DMG file generation.
The .git directories are no longer bundled (the check in was
for .svn directories), and the script contained a bug
that blocked the image generation.
    * 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.
    * development script: Conversion from SVN to git.
A number of spacing bugs have also been removed, simplifying the
release process.
    * relax manual: The script can now handle
the presence of latex2html.  If latex2html had been set up via the
docs/devel/latex2html/setup script, then
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
    * 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 'dwH_AB' parameter appears twice (the second should be 'dwH_AC').
However the typo was not caught in the tests as no currently
implemented dispersion model contains the 'dwH_AC' 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()
    * 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
    * 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 R1rho 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
    * 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.

    * 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
    * 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
    * 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 R1rho 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
in specific_analyses.relax_disp.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

nmr-relax-announce mailing list

Reply via email to