Difference between revisions of "Relax 3.3.0"

From relax wiki
Jump to navigation Jump to search
(Extended the tracker links to include the description.)
(User function HTML manual links.)
Line 868: Line 868:
 
* Epydoc parameter order rearrangement in the specific analysis API base class.
 
* Epydoc parameter order rearrangement in the specific analysis API base class.
 
* Updated the specific analysis API common methods for the recent model_info argument changes.
 
* Updated the specific analysis API common methods for the recent model_info argument changes.
* Updated all of the specific API calculate() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the minimise.calculate, minimise.grid_search and minimise.execute user functions and sent into the specific analysis backend.
+
* Updated all of the specific API calculate() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate], [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search] and [http://www.nmr-relax.com/manual/minimise_execute.html minimise.execute] user functions and sent into the specific analysis backend.
* Updated all of the specific API grid_search() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the minimise.calculate, minimise.grid_search and minimise.execute user functions and sent into the specific analysis backend.  The argument is also passed into the minimise() API method from the grid_search() method when that is used.
+
* Updated all of the specific API grid_search() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate], [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search] and [http://www.nmr-relax.com/manual/minimise_execute.html minimise.execute] user functions and sent into the specific analysis backend.  The argument is also passed into the minimise() API method from the grid_search() method when that is used.
* Updated all of the specific API minimise() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the minimise.calculate, minimise.grid_search and minimise.execute user functions and sent into the specific analysis backend.
+
* Updated all of the specific API minimise() methods to accept the scaling_matrix argument.  The list of per-model scaling matrices is now created independently of the analysis type by the pipe_control.minimise methods for the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate], [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search] and [http://www.nmr-relax.com/manual/minimise_execute.html minimise.execute] user functions and sent into the specific analysis backend.
 
* Fix for the Monte Carlo simulations for the model_info argument changes in the specific API.
 
* Fix for the Monte Carlo simulations for the model_info argument changes in the specific API.
 
* Fixes for the consistency testing and J(ω) mapping calculate() methods.  This is for the changes to the data_init() specific analysis API method.
 
* Fixes for the consistency testing and J(ω) mapping calculate() methods.  This is for the changes to the data_init() specific analysis API method.
Line 876: Line 876:
 
* Updated all of the data_init() specific API calls where the spin ID is expected.
 
* Updated all of the data_init() specific API calls where the spin ID is expected.
 
* Fixes for the _data_init_spin() specific API common method.  The data returned from _base_data_loop_spin() is just the spin ID, the spin container is not included.
 
* Fixes for the _data_init_spin() specific API common method.  The data returned from _base_data_loop_spin() is just the spin ID, the spin container is not included.
* Updated the eliminate user function backend to work with the model_info argument changes in the specific API.
+
* Updated the [http://www.nmr-relax.com/manual/eliminate.html eliminate user function] backend to work with the model_info argument changes in the specific API.
 
* The new pipe_control.minimise module functions can now handle models with no parameters.  The new assemble_scaling_matrix() and grid_setup() functions will now handle models with no parameters, as this is required for the relaxation dispersion analysis.
 
* The new pipe_control.minimise module functions can now handle models with no parameters.  The new assemble_scaling_matrix() and grid_setup() functions will now handle models with no parameters, as this is required for the relaxation dispersion analysis.
* More fixes for the eliminate user function backend.  This is for the model_info argument changes in the specific API.
+
* More fixes for the [http://www.nmr-relax.com/manual/eliminate.html eliminate user function] backend.  This is for the model_info argument changes in the specific API.
 
* Fixes for the grid search backend for a recent breakage and expansion of its capabilities.  The user supplied lower and upper bounds for the grid search were no longer being scaled via the scaling matrix.  In addition, the code has been refactored to be simpler and more flexible.  The user can now supply just the lower or just the upper bounds and the grid search will work.
 
* Fixes for the grid search backend for a recent breakage and expansion of its capabilities.  The user supplied lower and upper bounds for the grid search were no longer being scaled via the scaling matrix.  In addition, the code has been refactored to be simpler and more flexible.  The user can now supply just the lower or just the upper bounds and the grid search will work.
 
* The grid search setup function now prints out the grid search bounds to be used.  This is in the pipe_control.minimise.grid_setup() function, hence it is analysis independent.  This is useful feedback for the user to know what the grid search is doing.  And it will be even more useful for the zooming grid search to understand what is happening.
 
* The grid search setup function now prints out the grid search bounds to be used.  This is in the pipe_control.minimise.grid_setup() function, hence it is analysis independent.  This is useful feedback for the user to know what the grid search is doing.  And it will be even more useful for the zooming grid search to understand what is happening.
Line 885: Line 885:
 
* The grid search setup function now uses the prefix argument to the print_model_title() API function.  This is simply set to 'Grid search setup:'.
 
* The grid search setup function now uses the prefix argument to the print_model_title() API function.  This is simply set to 'Grid search setup:'.
 
* The relaxation dispersion API now uses the MODEL_R2EFF variable for identifying the [[R2eff]] model.
 
* The relaxation dispersion API now uses the MODEL_R2EFF variable for identifying the [[R2eff]] model.
* Changes to the minimise.grid_search user function frontend.  The Boolean constraints argument has been shifted to the end, and empty lines have been removed.
+
* Changes to the [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function] frontend.  The Boolean constraints argument has been shifted to the end, and empty lines have been removed.
 
* Epydoc docstring fixes for the keyword arguments of the pipe_control.minimise module.
 
* Epydoc docstring fixes for the keyword arguments of the pipe_control.minimise module.
 
* Shifted the constraints Boolean argument to the end of the grid_search() function argument list.
 
* Shifted the constraints Boolean argument to the end of the grid_search() function argument list.
* Major change to the grid search user function.  The minimise.grid_search user function now accepts the skip_preset flag.  When True, the grid search will skip any parameters with a preset value.  This allows the user to set parameters via the value.set user function and then have these parameters skipped in the grid search.  The new skip_preset argument is passed into the pipe_control.minimise.grid_setup() function in the backend.  This then sets both the grid lower and upper bounds to the preset parameter value and sets the number of increments to 1 for that parameter so that it is essentially skipped in the grid search.
+
* Major change to the grid search user function.  The [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function] now accepts the skip_preset flag.  When True, the grid search will skip any parameters with a preset value.  This allows the user to set parameters via the [http://www.nmr-relax.com/manual/value_set.html value.set user function] and then have these parameters skipped in the grid search.  The new skip_preset argument is passed into the pipe_control.minimise.grid_setup() function in the backend.  This then sets both the grid lower and upper bounds to the preset parameter value and sets the number of increments to 1 for that parameter so that it is essentially skipped in the grid search.
 
* Small change to the table printed out during the minimise.grid_search setup.
 
* Small change to the table printed out during the minimise.grid_search setup.
 
* Fix for the skipping of preset parameters in the grid search.  Dictionary and list type parameters are now handled correctly.
 
* Fix for the skipping of preset parameters in the grid search.  Dictionary and list type parameters are now handled correctly.
 
* Converted the relaxation dispersion analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the dispersion parameters.  This includes the functions dw_lower(), dwH_lower(), pA_lower() and i0_upper() in the specific_analyses.relax_disp.parameter_object module for calculating some of these values.  The specific_analyses.relax_disp.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the specific_analyses.relax_disp.optimisation.grid_search_setup() function was redundant and was deleted.  The specific_analyses.relax_disp.parameters.get_param_names() function was also modified with the full argument added, to allow either the base parameter names or an augmented form with the dictionary key for presenting to the user to be returned.  Importantly to allow the changes to be operational, the model_loop() API method was redesigned so that, for the [[R2eff]] base model, the individual spins rather than spin clusters will be looped over.  This allows the specific_analyses.relax_disp.optimisation.minimise_r2eff() function to continue to operate correctly.
 
* Converted the relaxation dispersion analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the dispersion parameters.  This includes the functions dw_lower(), dwH_lower(), pA_lower() and i0_upper() in the specific_analyses.relax_disp.parameter_object module for calculating some of these values.  The specific_analyses.relax_disp.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the specific_analyses.relax_disp.optimisation.grid_search_setup() function was redundant and was deleted.  The specific_analyses.relax_disp.parameters.get_param_names() function was also modified with the full argument added, to allow either the base parameter names or an augmented form with the dictionary key for presenting to the user to be returned.  Importantly to allow the changes to be operational, the model_loop() API method was redesigned so that, for the [[R2eff]] base model, the individual spins rather than spin clusters will be looped over.  This allows the specific_analyses.relax_disp.optimisation.minimise_r2eff() function to continue to operate correctly.
* Implemented the J(ω) mapping analysis get_param_names() API method.  This simply returns the hardcoded list of 3 parameters of the model, and allows the minimise.calculate user function to operate.
+
* Implemented the J(ω) mapping analysis get_param_names() API method.  This simply returns the hardcoded list of 3 parameters of the model, and allows the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function] to operate.
 
* Updated the _print_model_title_spin() specific API common method.  This now accepts the prefix argument and adds this to the title.
 
* Updated the _print_model_title_spin() specific API common method.  This now accepts the prefix argument and adds this to the title.
* The minimise.grid_search user function can now properly handle preset values of NaN.  This occurs when the parameter vector contains values of None due to the parameter not being set and then the Python list being converted to a numpy array.  The value of NaN is now caught and the parameter is no longer identified as being preset.
+
* The [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function] can now properly handle preset values of NaN.  This occurs when the parameter vector contains values of None due to the parameter not being set and then the Python list being converted to a numpy array.  The value of NaN is now caught and the parameter is no longer identified as being preset.
* Fixes for the relaxation curve-fitting grid search.  The parameters which are not set are no longer defaulting to 0.0.  This means that the parameter vector will sometimes contain NaN values, but this is important for the correct operation of the new minimise.grid_search user function backend.
+
* Fixes for the relaxation curve-fitting grid search.  The parameters which are not set are no longer defaulting to 0.0.  This means that the parameter vector will sometimes contain NaN values, but this is important for the correct operation of the new [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function] backend.
* Updated the NOE analysis to handle the changes for the minimise.calculate user function.  This now requires the model_loop() and get_param_names() API methods to be implemented.  The first is provided by the API common _model_loop_spin() method and the second simply returns a list of the single 'noe' parameter.
+
* Updated the NOE analysis to handle the changes for the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function].  This now requires the model_loop() and get_param_names() API methods to be implemented.  The first is provided by the API common _model_loop_spin() method and the second simply returns a list of the single 'noe' parameter.
 
* Created the _print_model_title_global() specific analysis API method.  This is to be paired with the _model_loop_single_global() API method and it simply prints out the prefix as the title.
 
* Created the _print_model_title_global() specific analysis API method.  This is to be paired with the _model_loop_single_global() API method and it simply prints out the prefix as the title.
 
* Created the specific analysis parameter object _add_align_tensor() method.  When called by a specific analysis, this will add the [Axx, Ayy, Axy, Axz, Ayz] parameters to the corresponding parameter object.
 
* Created the specific analysis parameter object _add_align_tensor() method.  When called by a specific analysis, this will add the [Axx, Ayy, Axy, Axz, Ayz] parameters to the corresponding parameter object.
Line 907: Line 907:
 
* Fix for the grid search setup printout when parameters are preset.
 
* Fix for the grid search setup printout when parameters are preset.
 
* Changes to the diffusion tensor initialisation in the model-free auto-analysis.  The values of the tensor are now initialised to None.  This is to allow for the new grid search preset flag which defaults to True, setting the values to None indicates that a grid search should be performed.
 
* Changes to the diffusion tensor initialisation in the model-free auto-analysis.  The values of the tensor are now initialised to None.  This is to allow for the new grid search preset flag which defaults to True, setting the values to None indicates that a grid search should be performed.
* The diffusion_tensor.init user function can now set initial tensor parameter values of None.  This is to allow for the new grid search preset flag.  Therefore allowing the values to be None allows for a grid search to be performed by default.
+
* The [http://www.nmr-relax.com/manual/diffusion_tensor_init.html diffusion_tensor.init user function] can now set initial tensor parameter values of None.  This is to allow for the new grid search preset flag.  Therefore allowing the values to be None allows for a grid search to be performed by default.
 
* Created two new model-free system tests.  These are Mf.test_m0_grid_with_grid_search and Mf.test_m0_grid_vs_m1_with_grid_search.  Their aim is to better test the grid search in a model-free analysis when parameters are preset.
 
* Created two new model-free system tests.  These are Mf.test_m0_grid_with_grid_search and Mf.test_m0_grid_vs_m1_with_grid_search.  Their aim is to better test the grid search in a model-free analysis when parameters are preset.
 
* Converted the model-free analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the model-free parameters.  This includes the functions rex_scaling() and rex_upper() in the specific_analyses.model_free.parameter_object module for calculating some of these values.  The base parameter object has also been updated as that is where the diffusion parameters are defined.  Here the da_lower() and da_upper() have been defined to handle the different Da value constraints.  The specific_analyses.model_free.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the grid_search_config(), grid_search_diff_bounds() and grid_search_spin_bounds() functions in the specific_analyses.model_free.optimisation module were redundant and were deleted.  The new API function print_model_title() has been implemented to handle the grid search setup printouts.
 
* Converted the model-free analysis to the new grid bounds and scaling factor design.  The parameter object now registers the grid bounds and scaling factors for all of the model-free parameters.  This includes the functions rex_scaling() and rex_upper() in the specific_analyses.model_free.parameter_object module for calculating some of these values.  The base parameter object has also been updated as that is where the diffusion parameters are defined.  Here the da_lower() and da_upper() have been defined to handle the different Da value constraints.  The specific_analyses.model_free.parameters.assemble_scaling_matrix() function has been deleted as this is now provided by the upstream code in pipe_control.minimise.  And the API methods grid_search() and minimise() has been modified to accept the list of scaling matrices.  As the grid bounds and increments are now handled by the upstream pipe_control.minimise.grid_setup() function, the grid_search_config(), grid_search_diff_bounds() and grid_search_spin_bounds() functions in the specific_analyses.model_free.optimisation module were redundant and were deleted.  The new API function print_model_title() has been implemented to handle the grid search setup printouts.
 
* Modified the pipe_control.minimise.grid_setup() function for when no parameters are present.  For the current version of minfx to function correctly ([https://gna.org/forum/forum.php?forum_id=2471 1.0.8]), the lower, upper and inc values should be set to [] rather than None.
 
* Modified the pipe_control.minimise.grid_setup() function for when no parameters are present.  For the current version of minfx to function correctly ([https://gna.org/forum/forum.php?forum_id=2471 1.0.8]), the lower, upper and inc values should be set to [] rather than None.
* Fix for the lib.arg_check.is_num_or_num_tuple().  When the can_be_none flag is set to True, the tuple of None values is now considered valid.  This enable the diffusion_tensor.init user function to accept the spheroid tensor values of (None, None, None, None), and the ellipsoid tensor values as a tuple of 6 None.
+
* Fix for the lib.arg_check.is_num_or_num_tuple().  When the can_be_none flag is set to True, the tuple of None values is now considered valid.  This enable the [http://www.nmr-relax.com/manual/diffusion_tensor_init.html diffusion_tensor.init user function] to accept the spheroid tensor values of (None, None, None, None), and the ellipsoid tensor values as a tuple of 6 None.
 
* Fix for the _prompt.test_diffusion_tensor.Test_diffusion_tensor.test_init_argfail_params unit test.  As the diffusion tensor can now be initialised as None, the None value can be accepted and a different RelaxError is raised when the params argument is incorrectly supplied.
 
* Fix for the _prompt.test_diffusion_tensor.Test_diffusion_tensor.test_init_argfail_params unit test.  As the diffusion tensor can now be initialised as None, the None value can be accepted and a different RelaxError is raised when the params argument is incorrectly supplied.
 
* Modified the behaviour of the parameter object units() method.  If the unit is set to the default of None, this method will now return an empty string instead of None.
 
* Modified the behaviour of the parameter object units() method.  If the unit is set to the default of None, this method will now return an empty string instead of None.
Line 917: Line 917:
 
* Implemented the zooming grid search.  If the zoom level is set to any value other than 0, then the grid width will be divided by 2<sup>zoom_level</sup> 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.
 
* Implemented the zooming grid search.  If the zoom level is set to any value other than 0, then the grid width will be divided by 2<sup>zoom_level</sup> and centred at the current parameter values.  If the new grid is outside of the bounds of the original grid, the entire grid will be translated so that it lies entirely within the original.
 
* Modified the zooming grid search algorithm.  If the zoom level is negative, hence the grid will be larger than the original, the checks that the grid is within the original are no longer active.
 
* Modified the zooming grid search algorithm.  If the zoom level is negative, hence the grid will be larger than the original, the checks that the grid is within the original are no longer active.
* Changed the minimise.grid_zoom user function.  The zoom level can now be any floating point number or integer, including negative values.  The user function docstring has been significantly expanded to explain the entire zooming grid search concept.
+
* Changed the [http://www.nmr-relax.com/manual/minimise_grid_zoom.html minimise.grid_zoom user function].  The zoom level can now be any floating point number or integer, including negative values.  The user function docstring has been significantly expanded to explain the entire zooming grid search concept.
 
* Alphabetical ordering of the minimisation user functions in the user_functions.minimisation module.
 
* Alphabetical ordering of the minimisation user functions in the user_functions.minimisation module.
* Large expansion of the minimise.grid_search user function documentation.  The previous documentation was essentially non-existent.
+
* Large expansion of the [http://www.nmr-relax.com/manual/minimise_grid_search.html minimise.grid_search user function documentation].  The previous documentation was essentially non-existent.
* Expanded the minimise.grid_zoom user function documentation.  A few sentences about the limitations of the algorithm have been added.
+
* Expanded the [http://www.nmr-relax.com/manual/minimise_grid_zoom.html minimise.grid_zoom user function documentation].  A few sentences about the limitations of the algorithm have been added.
 
* Completed the Relax_fit.test_zooming_grid_search system test.  Now only a single spin is optimised.  The zooming levels increase in integer increments from 0 to 50 so that the final zoomed grid is insanely small (as the curve-fitting C modules are incredibly fast, this test is nevertheless relatively quick).  The final zooming grid search parameter values are checked to see if they are the same as those optimised in the Relax_fit.test_curve_fitting_height system test to demonstrate the success of the algorithm.
 
* Completed the Relax_fit.test_zooming_grid_search system test.  Now only a single spin is optimised.  The zooming levels increase in integer increments from 0 to 50 so that the final zoomed grid is insanely small (as the curve-fitting C modules are incredibly fast, this test is nevertheless relatively quick).  The final zooming grid search parameter values are checked to see if they are the same as those optimised in the Relax_fit.test_curve_fitting_height system test to demonstrate the success of the algorithm.
 
* Modified the grid search upper bounds functions for the relaxation curve-fitting.  This is for both the exponential relaxation curve-fitting analysis and the same fitting in the dispersion analysis.  The intensity values are doubled and then rounded to the next order.  This ensures that I<sub>0</sub> and I<sub>&infin;</sub> will be within the grid bounds.  Hence the zooming grid search can be used for these curves.
 
* Modified the grid search upper bounds functions for the relaxation curve-fitting.  This is for both the exponential relaxation curve-fitting analysis and the same fitting in the dispersion analysis.  The intensity values are doubled and then rounded to the next order.  This ensures that I<sub>0</sub> and I<sub>&infin;</sub> will be within the grid bounds.  Hence the zooming grid search can be used for these curves.
* Expanded the documentation for the minimise.calculate user function.  This now explains the dual operations of the user function.
+
* Expanded the [documentation for the http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function].  This now explains the dual operations of the user function.
* Fixes for some relaxation dispersion system tests not converted to the new optimisation user functions.  Minimisation is now via the minimise.execute user function, which used to be the minimise user function.
+
* Fixes for some relaxation dispersion system tests not converted to the new optimisation user functions.  Minimisation is now via the [http://www.nmr-relax.com/manual/minimise_execute.html minimise.execute user function], which used to be the minimise user function.
 
* Added a 128x128 pixel version of the zoom-in Oxygen icon.  This icon size is not available in the repository located at svn://anonsvn.kde.org/home/kde/trunk/kdesupport/oxygen-icons.  Therefore the scalable/actions/small/48x48/zoom-in.svgz file was copied and then exported into a 128x128 PNG, and finally converted to a Gzipped EPS file for the relax manual.
 
* Added a 128x128 pixel version of the zoom-in Oxygen icon.  This icon size is not available in the repository located at svn://anonsvn.kde.org/home/kde/trunk/kdesupport/oxygen-icons.  Therefore the scalable/actions/small/48x48/zoom-in.svgz file was copied and then exported into a 128x128 PNG, and finally converted to a Gzipped EPS file for the relax manual.
 
* The frame order grid search bound functions can now handle increment values of None or 1.  These cases are now caught and the full lower or upper bound is now returned.
 
* The frame order grid search bound functions can now handle increment values of None or 1.  These cases are now caught and the full lower or upper bound is now returned.
Line 996: Line 996:
 
* Renamed return functions, to reflect they are specific for xmgrace plotting.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Renamed return functions, to reflect they are specific for xmgrace plotting.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Extended relax_disp auto_analyses to plot special R<sub>1&rho;</sub> graphs.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Extended relax_disp auto_analyses to plot special R<sub>1&rho;</sub> graphs.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
* Modified front-end user function relax_disp.plot_disp_curves to send new arguments to back-end function.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
+
* Modified front-end [user function http://www.nmr-relax.com/manual/relax_disp_plot_disp_curves.html relax_disp.plot_disp_curves] to send new arguments to back-end function.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Added new Unicode symbols to be used by the GUI drop-down menu.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Added new Unicode symbols to be used by the GUI drop-down menu.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Modified back-end of plot_disp_curves() to reflect changes to the front-end function.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Modified back-end of plot_disp_curves() to reflect changes to the front-end function.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
Line 1,014: Line 1,014:
 
* Added system test Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs() to check all possible combinations of dispersion plotting.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Added system test Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs() to check all possible combinations of dispersion plotting.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Fix for GUI text in MS Windows, since subscript <sub>1</sub> and Greek &theta; symbol is not working in this Unicode system.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Fix for GUI text in MS Windows, since subscript <sub>1</sub> and Greek &theta; symbol is not working in this Unicode system.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
* Fix for desc_short, in user function relax_disp.plot_disp_curves.  The text "The " is preformed in the formatting.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
+
* Fix for desc_short, in [user function http://www.nmr-relax.com/manual/relax_disp_plot_disp_curves.html relax_disp.plot_disp_curves].  The text "The " is preformed in the formatting.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Fix for system test, after moving graphs to check against.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Fix for system test, after moving graphs to check against.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Moved graph files up one level in system test.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Moved graph files up one level in system test.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
Line 1,021: Line 1,021:
 
* Added check function to plot_disp_curves, to check that CPMG exp types are not interpolated against offset, which is not implemented.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Added check function to plot_disp_curves, to check that CPMG exp types are not interpolated against offset, which is not implemented.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Fix for forgotten "1" in lib text GUI.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Fix for forgotten "1" in lib text GUI.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
* Improved description in GUI text for user function relax_disp.plot_disp_curves().  The improved description now explains the new features.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
+
* Improved description in GUI text for [user function http://www.nmr-relax.com/manual/relax_disp_plot_disp_curves.html relax_disp.plot_disp_curves].  The improved description now explains the new features.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Extended graph labelling, file naming and return of data for multiple CPMG graphs types.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Extended graph labelling, file naming and return of data for multiple CPMG graphs types.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Added system test Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs to check all CPMG graph combinations of:  y_axis_types = [Y_AXIS_R2_EFF, Y_AXIS_R2_R1RHO];  x_axis_types = [X_AXIS_DISP, X_AXIS_THETA, X_AXIS_W_EFF];  interpolate_types = [INTERPOLATE_DISP].  This is a total of 6 graphs.  The graphs will in most cases be totally equal, since the &theta; angle is calculated to 90 degrees, and R<sub>1</sub> is returned as 0.0, then R<sub>2</sub>=(R<sub>1&rho;</sub> - R<sub>1</sub> cos<sup>2</sup>(&theta;)) / sin<sup>2</sup>(&theta;) = R<sub>1&rho;</sub> = R<sub>2eff</sub> for CPMG models.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
 
* Added system test Relax_disp.test_kteilum_fmpoulsen_makke_check_graphs to check all CPMG graph combinations of:  y_axis_types = [Y_AXIS_R2_EFF, Y_AXIS_R2_R1RHO];  x_axis_types = [X_AXIS_DISP, X_AXIS_THETA, X_AXIS_W_EFF];  interpolate_types = [INTERPOLATE_DISP].  This is a total of 6 graphs.  The graphs will in most cases be totally equal, since the &theta; angle is calculated to 90 degrees, and R<sub>1</sub> is returned as 0.0, then R<sub>2</sub>=(R<sub>1&rho;</sub> - R<sub>1</sub> cos<sup>2</sup>(&theta;)) / sin<sup>2</sup>(&theta;) = R<sub>1&rho;</sub> = R<sub>2eff</sub> for CPMG models.  [https://gna.org/support/?3124 Sr #3124: Grace graphs production for R<sub>1&rho;</sub> analysis with R<sub>2eff</sub> as function of &Omega;<sub>eff</sub>].  [https://gna.org/support/?3138 Sr #3138: Interpolating &theta; through spin-lock offset &Omega;, rather than spin-lock field strength &omega;<sub>1</sub>].
Line 1,163: Line 1,163:
 
* Replaced variable name: MODEL_PARAM_INV_RELAX_TIMES with MODEL_LIST_INV_RELAX_TIMES, to match all of the other MODEL_LIST_* variables.  Also added a newline to end of file.
 
* Replaced variable name: MODEL_PARAM_INV_RELAX_TIMES with MODEL_LIST_INV_RELAX_TIMES, to match all of the other MODEL_LIST_* variables.  Also added a newline to end of file.
 
* Replaced remaining variable names: MODEL_PARAM_* with MODEL_LIST_*, to match all of the other MODEL_LIST_* variables.
 
* Replaced remaining variable names: MODEL_PARAM_* with MODEL_LIST_*, to match all of the other MODEL_LIST_* variables.
* Renamed R<sub>1&rho;</sub> off resonance models where R<sub>1</sub> is fitted.  This removes the "underscore".  This is a better representation presented to the user, for example in the GUI model selection list or the relax_disp.select_model user function in all UI.
+
* Renamed R<sub>1&rho;</sub> off resonance models where R<sub>1</sub> is fitted.  This removes the "underscore".  This is a better representation presented to the user, for example in the GUI model selection list or the [http://www.nmr-relax.com/manual/relax_disp_select_model.html relax_disp.select_model user function] in all UI.
 
* Renamed the parameter "r1_fit" to "r1".  This naming fits better to all other parameters.
 
* Renamed the parameter "r1_fit" to "r1".  This naming fits better to all other parameters.
 
* Split the unit test of specific_analyses.relax_disp.checks.get_times() into its own unit test file.
 
* Split the unit test of specific_analyses.relax_disp.checks.get_times() into its own unit test file.
Line 1,215: Line 1,215:
 
* Fixes for the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test on MS Windows.  This is for 32-bit MS Windows systems where the parameter checks need to be loosened.
 
* Fixes for the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test on MS Windows.  This is for 32-bit MS Windows systems where the parameter checks need to be loosened.
 
* Created the specific_analyses.relax_disp.data.is_r1_optimsed() function.  This follows from an idea for handling R<sub>1</sub> optimisation in the tread at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.  This relaxation dispersion function can be used anywhere that requires the knowledge that R<sub>1</sub> values should be fitted during optimisation or if loaded values should be used.
 
* Created the specific_analyses.relax_disp.data.is_r1_optimsed() function.  This follows from an idea for handling R<sub>1</sub> optimisation in the tread at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.  This relaxation dispersion function can be used anywhere that requires the knowledge that R<sub>1</sub> values should be fitted during optimisation or if loaded values should be used.
* Implemented the very basic relax_disp.r1_fit user function.  This is as discussed at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6737.
+
* Implemented the very basic [http://www.nmr-relax.com/manual/relax_disp_r1_fit.html relax_disp.r1_fit user function].  This is as discussed at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6737.
 
* Implemented the specific_analyses.relax_disp.parameters.r1_setup() function.  This matches the description at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6739 and http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.
 
* Implemented the specific_analyses.relax_disp.parameters.r1_setup() function.  This matches the description at http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6739 and http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.
 
* Spelling fix for the is_r1_optimised() function name.
 
* Spelling fix for the is_r1_optimised() function name.
Line 1,237: Line 1,237:
 
* Fixes for the relaxation dispersion loop_parameters() function.  The R<sub>1</sub>, R<sub>2</sub><sup>0</sup>, R<sub>2A</sub><sup>0</sup>, R<sub>2B</sub><sup>0</sup> (and R1rho_prime, R1rho_primeA, R1rho_primeB) parameters are now checked for in each spin container rather than just the first of the cluster.  This should make no difference as all spins should have the same model and parameters, but it might be a source of bugs in the future.
 
* Fixes for the relaxation dispersion loop_parameters() function.  The R<sub>1</sub>, R<sub>2</sub><sup>0</sup>, R<sub>2A</sub><sup>0</sup>, R<sub>2B</sub><sup>0</sup> (and R1rho_prime, R1rho_primeA, R1rho_primeB) parameters are now checked for in each spin container rather than just the first of the cluster.  This should make no difference as all spins should have the same model and parameters, but it might be a source of bugs in the future.
 
* The r1_fit flag is now used to switch between dispersion target functions.  This is as described in http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.  The change makes the '* R1 fit' models now redundant.
 
* The r1_fit flag is now used to switch between dispersion target functions.  This is as described in http://thread.gmane.org/gmane.science.nmr.relax.scm/22850/focus=6736.  The change makes the '* R1 fit' models now redundant.
* Removed all of the '* R1 fit' models out of the relax_disp.select_model user function frontend.  These models are now redundant as the question of R<sub>1</sub> fitting is now determined internally in relax.
+
* Removed all of the '* R1 fit' models out of the [http://www.nmr-relax.com/manual/relax_disp_select_model.html relax_disp.select_model user function] frontend.  These models are now redundant as the question of R<sub>1</sub> fitting is now determined internally in relax.
 
* Removed all of the MODEL_*_FIT_R1 dependencies from the specific_analyses.relax_disp package.  These models are now redundant as the question of R<sub>1</sub> fitting is now determined internally in relax.
 
* Removed all of the MODEL_*_FIT_R1 dependencies from the specific_analyses.relax_disp package.  These models are now redundant as the question of R<sub>1</sub> fitting is now determined internally in relax.
 
* Fix for the specific_analyses.relax_disp.data.is_r1_optimised() function for on-resonance R<sub>1&rho;</sub> data.  This function needs to specifically catch these models.
 
* Fix for the specific_analyses.relax_disp.data.is_r1_optimised() function for on-resonance R<sub>1&rho;</sub> data.  This function needs to specifically catch these models.
Line 1,244: Line 1,244:
 
* Modified the MODEL_LIST_R1RHO_OFF_RES list to include MODEL_NOREX_R1RHO.
 
* Modified the MODEL_LIST_R1RHO_OFF_RES list to include MODEL_NOREX_R1RHO.
 
* The specific_analyses.relax_disp.parameters.r1_setup() function is now being called.  This happens before the R<sub>1</sub> data is returned in the Disp_minimise_command class.
 
* The specific_analyses.relax_disp.parameters.r1_setup() function is now being called.  This happens before the R<sub>1</sub> data is returned in the Disp_minimise_command class.
* The dispersion auto-analysis now handles the optional R<sub>1</sub> parameter correctly.  The value.set user function was no longer setting the R<sub>1</sub> parameter to the default value when the grid search was deactivated, as it is no longer in MODEL_PARAMS.  So instead the new is_r1_optimised() function is being used to decide if the value.set user function should set the 'r1' parameter value.
+
* The dispersion auto-analysis now handles the optional R<sub>1</sub> parameter correctly.  The [http://www.nmr-relax.com/manual/value_set.html value.set user function] was no longer setting the R<sub>1</sub> parameter to the default value when the grid search was deactivated, as it is no longer in MODEL_PARAMS.  So instead the new is_r1_optimised() function is being used to decide if the [http://www.nmr-relax.com/manual/value_set.html value.set user function] should set the 'r1' parameter value.
 
* The dispersion loop_parameter() function now calls r1_setup() to handle R<sub>1</sub> parameters correctly.  This allows the R<sub>1</sub> parameter to be removed or added to the parameter list prior to looping over the parameters of the model.  The change is required to allow for the dynamic handling of R<sub>1</sub> parameters.
 
* The dispersion loop_parameter() function now calls r1_setup() to handle R<sub>1</sub> parameters correctly.  This allows the R<sub>1</sub> parameter to be removed or added to the parameter list prior to looping over the parameters of the model.  The change is required to allow for the dynamic handling of R<sub>1</sub> parameters.
 
* The dispersion back_calc_r2eff() function can now handle the dynamic R<sub>1</sub> parameter.  This required a call to r1_setup() to add or remove the parameter, and is_r1_optimised() to obtain the r1_fit flag to be sent into the target function class.
 
* The dispersion back_calc_r2eff() function can now handle the dynamic R<sub>1</sub> parameter.  This required a call to r1_setup() to add or remove the parameter, and is_r1_optimised() to obtain the r1_fit flag to be sent into the target function class.
Line 1,253: Line 1,253:
 
* Fix for the test_nesting_param_5 unit test.  The 'r1' parameter is now dynamic and hence will not be present in the initial list.
 
* Fix for the test_nesting_param_5 unit test.  The 'r1' parameter is now dynamic and hence will not be present in the initial list.
 
* One final fix for the Model_class.params list with 'r1'.  The is_r1_optimised() function is now called with the model name argument, as required.
 
* One final fix for the Model_class.params list with 'r1'.  The is_r1_optimised() function is now called with the model name argument, as required.
* Updated the relax_disp.r1_fit user function docstring.  This now includes information about which models support R<sub>1</sub> parameter optimisation.
+
* Updated the [http://www.nmr-relax.com/manual/relax_disp_r1_fit.html relax_disp.r1_fit user function] docstring.  This now includes information about which models support R<sub>1</sub> parameter optimisation.
 
* Removed results files to allow the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test to pass.  These are the test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/check_graphs/mc_2000/ results files for the [[No Rex]] and [[DPL94]] models, as well as the final run.  This commit is to allow the test to temporarily pass.  It can be reverted once a better solution is discussed and decided upon.
 
* Removed results files to allow the Relax_disp.test_r1rho_kjaergaard_missing_r1 system test to pass.  These are the test_suite/shared_data/dispersion/Kjaergaard_et_al_2013/check_graphs/mc_2000/ results files for the [[No Rex]] and [[DPL94]] models, as well as the final run.  This commit is to allow the test to temporarily pass.  It can be reverted once a better solution is discussed and decided upon.
 
* Altered the number of Monte Carlo simulations in test script to 2000.
 
* Altered the number of Monte Carlo simulations in test script to 2000.
Line 1,260: Line 1,260:
 
* Converted the relaxation dispersion GUI interface to the unified [[No Rex]] model.  All of the MODEL_NOREX_R1RHO references have simply been deleted.
 
* Converted the relaxation dispersion GUI interface to the unified [[No Rex]] model.  All of the MODEL_NOREX_R1RHO references have simply been deleted.
 
* Converted the relaxation dispersion target function class to the unified [[No Rex]] model design.  On top of removing all references to MODEL_NOREX_R1RHO, the aliasing of self.func now checks the experiment type list to determine which target function to use.  This is not an ideal solution and will not handle mixed CPMG and R<sub>1&rho;</sub> experiment, however neither will the target functions yet.  The creation of the off-resonance data structures has also been modified so that they are now R<sub>1&rho;</sub> independent.  This allows the structures to be properly created while at the same time enabling this code to be compatible with off-resonance CPMG data in the future.
 
* Converted the relaxation dispersion target function class to the unified [[No Rex]] model design.  On top of removing all references to MODEL_NOREX_R1RHO, the aliasing of self.func now checks the experiment type list to determine which target function to use.  This is not an ideal solution and will not handle mixed CPMG and R<sub>1&rho;</sub> experiment, however neither will the target functions yet.  The creation of the off-resonance data structures has also been modified so that they are now R<sub>1&rho;</sub> independent.  This allows the structures to be properly created while at the same time enabling this code to be compatible with off-resonance CPMG data in the future.
* Removed the 'No Rex R1rho off res' model from the relax_disp.select_model user function frontend.
+
* Removed the 'No Rex R1rho off res' model from the [http://www.nmr-relax.com/manual/relax_disp_select_model.html relax_disp.select_model user function frontend].
 
* Removed all references to the 'No Rex R1rho off res' model in the system tests.  In addition, the Relax_disp.test_convert_no_rex system test has been deleted as it no longer has a purpose.  For the Relax_disp.test_model_nesting_and_param system test, to allow this to work the cdp.exp_type_list list is set to EXP_TYPE_LIST.
 
* Removed all references to the 'No Rex R1rho off res' model in the system tests.  In addition, the Relax_disp.test_convert_no_rex system test has been deleted as it no longer has a purpose.  For the Relax_disp.test_model_nesting_and_param system test, to allow this to work the cdp.exp_type_list list is set to EXP_TYPE_LIST.
 
* Removed all references to the 'No Rex R1rho off res' model in the unit tests.
 
* Removed all references to the 'No Rex R1rho off res' model in the unit tests.
Line 1,266: Line 1,266:
 
* Added a subsection to the dispersion chapter of the manual about R<sub>1</sub> parameter optimisation.
 
* Added a subsection to the dispersion chapter of the manual about R<sub>1</sub> parameter optimisation.
 
* Added the R<sub>1</sub> parameter fitting GUI element to the dispersion GUI tab.  This is a simple Boolean toggle element that allows the R<sub>1</sub> optimisation to be turned on.  The value is passed into the auto-analysis.
 
* Added the R<sub>1</sub> parameter fitting GUI element to the dispersion GUI tab.  This is a simple Boolean toggle element that allows the R<sub>1</sub> optimisation to be turned on.  The value is passed into the auto-analysis.
* Added the r1_fit argument to the relaxation dispersion auto-analysis.  When this is True, the relax_disp.r1_fit user function will be called to turn R<sub>1</sub> parameter fitting on.
+
* Added the r1_fit argument to the relaxation dispersion auto-analysis.  When this is True, the [http://www.nmr-relax.com/manual/relax_disp_r1_fit.html relax_disp.r1_fit user function] will be called to turn R<sub>1</sub> parameter fitting on.
* Added the relax_disp.spin_lock_offset user function to the dispersion GUI.  This has been added to the pop up menu in the spectrum list GUI element, when the relax_disp_flag has been set.  It simply mimics the relax_disp.spin_lock_field functionality already present.  This follows from [https://gna.org/task/?7820 task #7820].
+
* Added the [http://www.nmr-relax.com/manual/relax_disp_spin_lock_offset.html relax_disp.spin_lock_offset user function] to the dispersion GUI.  This has been added to the pop up menu in the spectrum list GUI element, when the relax_disp_flag has been set.  It simply mimics the relax_disp.spin_lock_field functionality already present.  This follows from [https://gna.org/task/?7820 task #7820].
* Fix for the relax_disp.spin_lock_offset user function in the dispersion GUI tab.  This is in the spectrum list element popup menu.
+
* Fix for the [http://www.nmr-relax.com/manual/relax_disp_spin_lock_offset.html relax_disp.spin_lock_offset user function] in the dispersion GUI tab.  This is in the spectrum list element popup menu.
 
* Added the offset column to the spectrum list GUI element for the dispersion analysis.  This is to complete [https://gna.org/task/?7820 task #7820].  The spectrum list GUI element add_offset() method has been added to insert the offset column when the relax_disp_flag is set.  This is called by the update_data() method to fill and update the GUI element.
 
* Added the offset column to the spectrum list GUI element for the dispersion analysis.  This is to complete [https://gna.org/task/?7820 task #7820].  The spectrum list GUI element add_offset() method has been added to insert the offset column when the relax_disp_flag is set.  This is called by the update_data() method to fill and update the GUI element.
 
* Implemented the GUI test Relax_disp.test_bug_22501_close_all_analyse to catch [https://gna.org/bugs/?22501 bug #22501, 'Close all analyses' raises error].
 
* Implemented the GUI test Relax_disp.test_bug_22501_close_all_analyse to catch [https://gna.org/bugs/?22501 bug #22501, 'Close all analyses' raises error].
Line 1,275: Line 1,275:
 
* Modified system test test_bug_9999_slow_r1rho_r2eff_error_with_mc to save data arrays.  This is to prepare a profiling script.
 
* Modified system test test_bug_9999_slow_r1rho_r2eff_error_with_mc to save data arrays.  This is to prepare a profiling script.
 
* Added start script with basic data for profiling the relax curve fit.
 
* Added start script with basic data for profiling the relax curve fit.
* Created the Structure.test_create_diff_tensor_pdb system test.  This is to show the failure of the structure.create_diff_tensor_pdb user function when no structural data is present.
+
* Created the Structure.test_create_diff_tensor_pdb system test.  This is to show the failure of the [http://www.nmr-relax.com/manual/structure_create_diff_tensor_pdb.html structure.create_diff_tensor_pdb user function] when no structural data is present.
 
* Created the Structure.test_create_diff_tensor_pdb2 system test.  This is to catch another situation leading to [https://gna.org/bugs/?22505 bug #22505, the failure of the structure.create_diff_tensor_pdb user function when no structural data is present].
 
* Created the Structure.test_create_diff_tensor_pdb2 system test.  This is to catch another situation leading to [https://gna.org/bugs/?22505 bug #22505, the failure of the structure.create_diff_tensor_pdb user function when no structural data is present].
 
* Added an optimisation script for the test_suite/shared_data/diffusion_tensor/ellipsoid relaxation data.  This is to help catch [https://gna.org/bugs/?22502 bug #22502, the geometric prolate diffusion representation does not align with axis in PDB], as reported by Martin Ballaschk (https://gna.org/users/mab).  The PDB files of the optimised tensor demonstrate exactly the same problem as seen in the files attached to the bug report.  The oblate and spherical diffusion tensor representations match that of the ellipsoid.  But the prolate axis and tensor orientation are both different from the ellipsoid as well as themselves.
 
* Added an optimisation script for the test_suite/shared_data/diffusion_tensor/ellipsoid relaxation data.  This is to help catch [https://gna.org/bugs/?22502 bug #22502, the geometric prolate diffusion representation does not align with axis in PDB], as reported by Martin Ballaschk (https://gna.org/users/mab).  The PDB files of the optimised tensor demonstrate exactly the same problem as seen in the files attached to the bug report.  The oblate and spherical diffusion tensor representations match that of the ellipsoid.  But the prolate axis and tensor orientation are both different from the ellipsoid as well as themselves.
Line 1,309: Line 1,309:
 
* Reused the dependency check "scipy_module", since leastsq() has been part of Scipy since 2003.
 
* Reused the dependency check "scipy_module", since leastsq() has been part of Scipy since 2003.
 
* Moved target function for curve fitting with scipy into specific_analyses.relax_disp.estimate_r2eff.  This will later include the backend specific_analyses.relax_disp.optimisation.estimate_r2eff() function and the code in the target_functions package.  The code in target_functions.relax_disp_curve_fit is a lot more than just a target function, so it doesn't really belong in this package.  This is also to isolate this experimental feature.
 
* Moved target function for curve fitting with scipy into specific_analyses.relax_disp.estimate_r2eff.  This will later include the backend specific_analyses.relax_disp.optimisation.estimate_r2eff() function and the code in the target_functions package.  The code in target_functions.relax_disp_curve_fit is a lot more than just a target function, so it doesn't really belong in this package.  This is also to isolate this experimental feature.
* Isolated all code related to user function relax_disp.r2eff_estimate into independent module file.  All has been isolated to: specific_analyses.relax_disp.estimate_r2eff.
+
* Isolated all code related to [user function http://www.nmr-relax.com/manual/relax_disp_r2eff_estimate.html relax_disp.r2eff_estimate] into independent module file.  All has been isolated to: specific_analyses.relax_disp.estimate_r2eff.
 
* Split function to minimise with scipy.optimize.leastsq out in estimate_r2eff module.  This is to prepare for implementing with minfx.
 
* Split function to minimise with scipy.optimize.leastsq out in estimate_r2eff module.  This is to prepare for implementing with minfx.
 
* Implemented first try to minimise with minfx in estimate_r2eff() function.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Implemented first try to minimise with minfx in estimate_r2eff() function.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
Line 1,390: Line 1,390:
 
* Implemented the Jacobian of exponential function in Python code.  This now also gets the same error as leastsq and C code.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Implemented the Jacobian of exponential function in Python code.  This now also gets the same error as leastsq and C code.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Tried to implement a safety test for linearly-dependent columns in the covariance matrix.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Tried to implement a safety test for linearly-dependent columns in the covariance matrix.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
* Fixes for the relax_disp.r2eff_estimate user function documentation.  This is to allow the relax manual to compile again as the original documentation was causing LaTeX failures.
+
* Fixes for the [http://www.nmr-relax.com/manual/relax_disp_r2eff_estimate.html relax_disp.r2eff_estimate user function documentation].  This is to allow the relax manual to compile again as the original documentation was causing LaTeX failures.
 
* Clean up of the declarations in the target_functions.relax_fit C module.  The Python list objects are now declared at the start of the functions, and then PyList_New() is called later on.  This allows the code to compile on certain Windows systems.
 
* Clean up of the declarations in the target_functions.relax_fit C module.  The Python list objects are now declared at the start of the functions, and then PyList_New() is called later on.  This allows the code to compile on certain Windows systems.
 
* Removed the user function to estimate the R<sub>2eff</sub> values and errors with scipy.optimize.leastsq.  With the newly implemented Jacobian and Hessian of the exponential decay function, the front-end to scipy.optimize.leastsq does not serve a purpose.  This is because minfx is now as fast as scipy.optimize.leastsq, and can estimate the errors from the Jacobian to the exact same numbers as scipy.optimize.leastsq.  In addition to that, the covariance can be calculated by QR decomposition.  This adds additional feature for checking for a singular matrix.  The back-end will still be kept in place for the coming tim, but could be removed later.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Removed the user function to estimate the R<sub>2eff</sub> values and errors with scipy.optimize.leastsq.  With the newly implemented Jacobian and Hessian of the exponential decay function, the front-end to scipy.optimize.leastsq does not serve a purpose.  This is because minfx is now as fast as scipy.optimize.leastsq, and can estimate the errors from the Jacobian to the exact same numbers as scipy.optimize.leastsq.  In addition to that, the covariance can be calculated by QR decomposition.  This adds additional feature for checking for a singular matrix.  The back-end will still be kept in place for the coming tim, but could be removed later.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
* Added front-end to the new user function relax_disp.r2eff_err_estimate(), which will estimate the R<sub>2eff</sub> errors from a pipe and spins with optimised values of R<sub>2eff</sub> and I<sub>0</sub>.  The covariance matrix can be calculated from the optimised parameters, and the Jacobian.  Big care should be taken not to directly trust these results, since the errors are quite different compared to the Monte Carlo simulations.  This implementation, will reach the exact same error estimation as scipy.optimize.leastsq.  But with much better control over the data, and insight into the calculations.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
+
* Added front-end to the new [user function http://www.nmr-relax.com/manual/relax_disp_r2eff_err_estimate.html relax_disp.r2eff_err_estimate], which will estimate the R<sub>2eff</sub> errors from a pipe and spins with optimised values of R<sub>2eff</sub> and I<sub>0</sub>.  The covariance matrix can be calculated from the optimised parameters, and the Jacobian.  Big care should be taken not to directly trust these results, since the errors are quite different compared to the Monte Carlo simulations.  This implementation, will reach the exact same error estimation as scipy.optimize.leastsq.  But with much better control over the data, and insight into the calculations.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Added method to automatically perform error analysis on peak heights.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Added method to automatically perform error analysis on peak heights.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Modified system test Relax_disp.test_estimate_r2eff() to first do a grid search, then minimise and then estimate the errors for R<sub>2eff</sub> and I<sub>0</sub>.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Modified system test Relax_disp.test_estimate_r2eff() to first do a grid search, then minimise and then estimate the errors for R<sub>2eff</sub> and I<sub>0</sub>.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
Line 1,439: Line 1,439:
 
* Added all gyromagnetic ratio information from lib.physical_constants to lib.periodic_table.  The Periodic_table.gyromagnetic_ratio() method has been added to allow this value to be easily returned.
 
* Added all gyromagnetic ratio information from lib.physical_constants to lib.periodic_table.  The Periodic_table.gyromagnetic_ratio() method has been added to allow this value to be easily returned.
 
* Added to back-end of R<sub>2eff</sub> estimate module, to be able to switch between the function Jacobian or the &chi;<sup>2</sup> Jacobian.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Added to back-end of R<sub>2eff</sub> estimate module, to be able to switch between the function Jacobian or the &chi;<sup>2</sup> Jacobian.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
* Modified user function 'relax_disp.r2eff_err_estimate', to be able switch between the Jacobians.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
+
* Modified [user function http://www.nmr-relax.com/manual/relax_disp_r2eff_err_estimate.html relax_disp.r2eff_err_estimate], to be able switch between the Jacobians.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Modified system test Relax_disp.verify_estimate_r2eff_err_compare_mc, to try the difference between the Jacobian.  The results are:  Printing the estimated R<sub>2eff</sub> error as function of estimation from covariance and number of Monte Carlo simulations.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Modified system test Relax_disp.verify_estimate_r2eff_err_compare_mc, to try the difference between the Jacobian.  The results are:  Printing the estimated R<sub>2eff</sub> error as function of estimation from covariance and number of Monte Carlo simulations.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Deleted the gyromagnetic ratio values and return_gyromagnetic_ratio() function from lib.physical_constants.
 
* Deleted the gyromagnetic ratio values and return_gyromagnetic_ratio() function from lib.physical_constants.
Line 1,459: Line 1,459:
 
* Added system test Relax_disp.test_bug_atul_srivastava(), to catch a bug missing raising a RelaxError, since the setup points to a situation where the data shows it is exponential fitting, but only one time point is added per file.  This follows:  http://thread.gmane.org/gmane.science.nmr.relax.user/1718 http://thread.gmane.org/gmane.science.nmr.relax.user/1735  Specifically, data was attached here: http://thread.gmane.org/gmane.science.nmr.relax.user/1735/focus=1736.
 
* Added system test Relax_disp.test_bug_atul_srivastava(), to catch a bug missing raising a RelaxError, since the setup points to a situation where the data shows it is exponential fitting, but only one time point is added per file.  This follows:  http://thread.gmane.org/gmane.science.nmr.relax.user/1718 http://thread.gmane.org/gmane.science.nmr.relax.user/1735  Specifically, data was attached here: http://thread.gmane.org/gmane.science.nmr.relax.user/1735/focus=1736.
 
* Parameter precision lowered for Relax_disp.test_estimate_r2eff_err_auto().  This is due to change to C code.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Parameter precision lowered for Relax_disp.test_estimate_r2eff_err_auto().  This is due to change to C code.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
* Created the select.display user function.  This simply displays the current spin selections of all spins.  In the future it can be extended to display the interatomic data container selections, domain selections, etc.
+
* Created the [http://www.nmr-relax.com/manual/select_display.html select.display user function].  This simply displays the current spin selections of all spins.  In the future it can be extended to display the interatomic data container selections, domain selections, etc.
 
* Fix for system test: test_estimate_r2eff_err_auto().  The Jacobian to estimate the errors has been changed from the direct function Jacobian, to the Jacobian of the &chi;<sup>2</sup> function.  This changes the R<sub>2eff</sub> error predictions, and hence parameter fitting.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Fix for system test: test_estimate_r2eff_err_auto().  The Jacobian to estimate the errors has been changed from the direct function Jacobian, to the Jacobian of the &chi;<sup>2</sup> function.  This changes the R<sub>2eff</sub> error predictions, and hence parameter fitting.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Implemented the direct Jacobian in Python, to be independent of C code in development phase.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Implemented the direct Jacobian in Python, to be independent of C code in development phase.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
Line 1,475: Line 1,475:
 
* Moved unnecessary function in R<sub>2eff</sub> error estimate module into experimental class.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Moved unnecessary function in R<sub>2eff</sub> error estimate module into experimental class.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Implemented system test: test_bug_negative_intensities_cpmg, to show lack of error message to user.  Maybe these spins should be de-selected, or at least show a better warning.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Implemented system test: test_bug_negative_intensities_cpmg, to show lack of error message to user.  Maybe these spins should be de-selected, or at least show a better warning.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
* An attempt at documenting the Monte Carlo simulation verses covariance matrix error estimates.  This is for the R<sub>2eff</sub> and I<sub>0</sub> parameters of the exponential curves.  For the Monte Carlo errors, 10000 simulations were preformed.  This means that these errors can perform as a gold standard by which to judge the covariance matrix technique.  Currently it can be seen that the relax_disp.r2eff_err_estimate user function with the chi2_jacobian flag set to True performs extremely poorly.
+
* An attempt at documenting the Monte Carlo simulation verses covariance matrix error estimates.  This is for the R<sub>2eff</sub> and I<sub>0</sub> parameters of the exponential curves.  For the Monte Carlo errors, 10000 simulations were preformed.  This means that these errors can perform as a gold standard by which to judge the covariance matrix technique.  Currently it can be seen that the [http://www.nmr-relax.com/manual/relax_disp_r2eff_err_estimate.html relax_disp.r2eff_err_estimate user function] with the chi2_jacobian flag set to True performs extremely poorly.
 
* Reintroduced the original target_functions.relax_fit.jacobian() function.  The new function for the Jacobian of the chi-squared function has been renamed to target_functions.relax_fit.jacobian_chi2() so that both Python functions are accessible within the C module.
 
* Reintroduced the original target_functions.relax_fit.jacobian() function.  The new function for the Jacobian of the chi-squared function has been renamed to target_functions.relax_fit.jacobian_chi2() so that both Python functions are accessible within the C module.
 
* Epydoc fixes for the pipe_control.mol_res_spin.format_info_full() function.
 
* Epydoc fixes for the pipe_control.mol_res_spin.format_info_full() function.
Line 1,482: Line 1,482:
 
* Moved intensity negative value from reference to CPMG point.
 
* Moved intensity negative value from reference to CPMG point.
 
* Modified system test test_bug_negative_intensities_cpmg, to prepare for testing number of R<sub>2eff</sub> points.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Modified system test test_bug_negative_intensities_cpmg, to prepare for testing number of R<sub>2eff</sub> points.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
* Comparison of 10,000 Monte Carlo simulations to a different covariance matrix error estimate.  The covariance_matrix.py script has been duplicated and the chi2_jacobian argument of the relax_disp.r2eff_err_estimate user function has been changed from True to False.  As can be seen in the 2D Grace plots, this error estimate is incredibly different.  The R<sub>2eff</sub> errors are overestimated by a factor of 1.9555, which indicates that the Jacobian or covariance matrix formula are not yet correct.
+
* Comparison of 10,000 Monte Carlo simulations to a different covariance matrix error estimate.  The covariance_matrix.py script has been duplicated and the chi2_jacobian argument of the [http://www.nmr-relax.com/manual/relax_disp_r2eff_err_estimate.html relax_disp.r2eff_err_estimate user function] has been changed from True to False.  As can be seen in the 2D Grace plots, this error estimate is incredibly different.  The R<sub>2eff</sub> errors are overestimated by a factor of 1.9555, which indicates that the Jacobian or covariance matrix formula are not yet correct.
 
* The target_functions.relax_fit C module Python function jacobian_chi2() is now exposed.  This was previously not visible from within Python.
 
* The target_functions.relax_fit C module Python function jacobian_chi2() is now exposed.  This was previously not visible from within Python.
 
* Added a script and log file for calculating the numerical Jacobian for an exponential curve.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the Jacobian using the numdifftools.Jacobian object construct and obtain the matrix, both at the minimum and at a point away from the minimum.  The values will be used to construct a unit test to check the C module implementation.
 
* Added a script and log file for calculating the numerical Jacobian for an exponential curve.  This uses the data at http://thread.gmane.org/gmane.science.nmr.relax.devel/6807/focus=6840 and calculates the Jacobian using the numdifftools.Jacobian object construct and obtain the matrix, both at the minimum and at a point away from the minimum.  The values will be used to construct a unit test to check the C module implementation.
Line 1,503: Line 1,503:
 
* Moved multifit_covar into lib.statistics, since it is an independent module.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Moved multifit_covar into lib.statistics, since it is an independent module.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Moved "func_exp_grad" into experimental class for different minimisation methods.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Moved "func_exp_grad" into experimental class for different minimisation methods.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
* Improved documentation to user function relax_disp.r2eff_err_estimate, and removed the possibility to use the &chi;<sup>2</sup> Jacobian, as this is rubbish.  But the back-end still have this possibility, should one desire to try this.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
+
* Improved documentation to [user function http://www.nmr-relax.com/manual/relax_disp_r2eff_err_estimate.html relax_disp.r2eff_err_estimate], and removed the possibility to use the &chi;<sup>2</sup> Jacobian, as this is rubbish.  But the back-end still have this possibility, should one desire to try this.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Moved the argument 'chi2_jacobian' as the last argument in estimate_r2eff_err.  This argument is highly likely not to be used, but is kept for future testing purposes.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Moved the argument 'chi2_jacobian' as the last argument in estimate_r2eff_err.  This argument is highly likely not to be used, but is kept for future testing purposes.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Fix to experimental class for fitting with different methods.  After moving the function into class, 'self' should be added to the function.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
 
* Fix to experimental class for fitting with different methods.  After moving the function into class, 'self' should be added to the function.  [https://gna.org/task/?7822 Task #7822: Implement user function to estimate R<sub>2eff</sub> and associated errors for exponential curve fitting].
Line 1,534: Line 1,534:
 
* Allow R<sub>2eff</sub> model to reach constrained methods in minfx through relax.  This is in system test Relax_disp.verify_estimate_r2eff_err_compare_mc()  This though not seem to be supported.
 
* Allow R<sub>2eff</sub> model to reach constrained methods in minfx through relax.  This is in system test Relax_disp.verify_estimate_r2eff_err_compare_mc()  This though not seem to be supported.
 
* Modified specific_analyses.relax_disp.parameters.r1_setup() to initialise the 'r1' variable.  This relates to [https://gna.org/bugs/?22541 bug #22541, the R<sub>1</sub> fit flag does not work in the GUI].  This is a hack, as all of the dispersion analysis code assumes that all parameters are initialised.  This is a dangerous assumption that will have to be eliminated in the future.
 
* Modified specific_analyses.relax_disp.parameters.r1_setup() to initialise the 'r1' variable.  This relates to [https://gna.org/bugs/?22541 bug #22541, the R<sub>1</sub> fit flag does not work in the GUI].  This is a hack, as all of the dispersion analysis code assumes that all parameters are initialised.  This is a dangerous assumption that will have to be eliminated in the future.
* The dispersion get_param_values() API method now calls the r1_setup() function.  This relates to [https://gna.org/bugs/?22541 bug #22541, the R<sub>1</sub> fit flag does not work in the GUI].  This is to make sure that the parameters are correctly set up prior to obtaining all parameter values.  The R<sub>1</sub> parameter is dynamic hence r1_setup() needs to be called at any point model parameters are accessed, as the R<sub>1</sub> parameter can be turned on or off at any time with the relax_disp.r1_fit user function.
+
* The dispersion get_param_values() API method now calls the r1_setup() function.  This relates to [https://gna.org/bugs/?22541 bug #22541, the R<sub>1</sub> fit flag does not work in the GUI].  This is to make sure that the parameters are correctly set up prior to obtaining all parameter values.  The R<sub>1</sub> parameter is dynamic hence r1_setup() needs to be called at any point model parameters are accessed, as the R<sub>1</sub> parameter can be turned on or off at any time with the [http://www.nmr-relax.com/manual/relax_disp_r1_fit.html relax_disp.r1_fit user function].
 
* Yet another try to implement constrained method in verify_estimate_r2eff_err_compare_mc.
 
* Yet another try to implement constrained method in verify_estimate_r2eff_err_compare_mc.
 
* Another attempt to reach constrained method in minfx through relax.  I would need to specify:  l, lower bound constraint vector (l &le; x &le; u);  u, upper bound constraint vector (l &le; x &le; u);  c: user supplied constraint function;  dc: user supplied constraint gradient function.
 
* Another attempt to reach constrained method in minfx through relax.  I would need to specify:  l, lower bound constraint vector (l &le; x &le; u);  u, upper bound constraint vector (l &le; x &le; u);  c: user supplied constraint function;  dc: user supplied constraint gradient function.
Line 1,543: Line 1,543:
 
* Fixes for the Relax_disp.test_estimate_r2eff_err system test.  The k<sub>ex</sub> parameter value checks have all been scaled by 1e<sup>-5</sup> to allow for a meaningful floating point number comparison.  The number of significant figures have also been scaled.  This allows the test to now pass on one 64-bit GNU/Linux system.
 
* Fixes for the Relax_disp.test_estimate_r2eff_err system test.  The k<sub>ex</sub> parameter value checks have all been scaled by 1e<sup>-5</sup> to allow for a meaningful floating point number comparison.  The number of significant figures have also been scaled.  This allows the test to now pass on one 64-bit GNU/Linux system.
 
* Another fix for the minfx version checking in the dep_check module.  The version_comparison() function has been created to perform a proper version number comparison by stripping trailing zeros, converting the two version numbers to lists of int and comparing the lists using the Python cmp() function.  This will return -1 when the version number is too low, 0 when the versions are equal, and 1 when the version is higher than the minimum.
 
* Another fix for the minfx version checking in the dep_check module.  The version_comparison() function has been created to perform a proper version number comparison by stripping trailing zeros, converting the two version numbers to lists of int and comparing the lists using the Python cmp() function.  This will return -1 when the version number is too low, 0 when the versions are equal, and 1 when the version is higher than the minimum.
* Added a button for the spectrum.error_analysis user function to the spectra list GUI element.  This is placed after the 'Add' and 'Delete' buttons.  The functionality could be improved by presetting the spectrum ID argument to anything the user has selected in the spectrum list.
+
* Added a button for the [http://www.nmr-relax.com/manual/spectrum_error_analysis.html spectrum.error_analysis user function] to the spectra list GUI element.  This is placed after the 'Add' and 'Delete' buttons.  The functionality could be improved by presetting the spectrum ID argument to anything the user has selected in the spectrum list.
 
* Modified the behaviour of the spectrum.error_analysis button in the spectrum list GUI element.  Now the subset argument of this user function will be pre-set to any spectra selected in the list.
 
* Modified the behaviour of the spectrum.error_analysis button in the spectrum list GUI element.  Now the subset argument of this user function will be pre-set to any spectra selected in the list.
 
* Improvements for the spectrum.error_analysis button in the spectrum list GUI element.  The user function is now launched as being modal so that the rest of the GUI freezes, and after the user function is executed the relax controller window is show and scrolled to the bottom.
 
* Improvements for the spectrum.error_analysis button in the spectrum list GUI element.  The user function is now launched as being modal so that the rest of the GUI freezes, and after the user function is executed the relax controller window is show and scrolled to the bottom.

Revision as of 14:25, 9 September 2014


Description

This is a major feature release which includes a huge number of changes, as can be seen below. The most important change is an incredible speed up of all relaxation dispersion models. See the table below for a comparison to the previous relax 3.2.3 release. The maximum possible advantage of linear algebra operations are used to eliminate all of the slow Python looping and to obtain the ultimate algorithms for speed. As this is using NumPy, conversion to C or FORTRAN will not result in any significant speed advantage. With these huge speed ups, relax should now be one of the fastest software packages for analysing relaxation dispersion phenomena.

Other important features include the implementation of a zooming grid search algorithm for use in all analysis types, expanded plotting capabilities for R values in the relaxation dispersion analysis, the ability to optimise the R1 parameter in all off-resonance dispersion models, proper minimisation statistics resetting by the minimisation user functions, and a large expansion of the periodic table information for all elements in the relax library for correctly estimating molecular masses. Additional features are that there is better tab completion support in the prompt UI for Mac OS X, the addition of the time user function for printing the current date and time, the value.copy user function accepting a force argument for overwriting values, model nesting in the dispersion auto-analysis has been extended, the spin-lock offset is now shown in the dispersion analysis in the GUI, the relax_disp.r2eff_estimate user function has been added for fast R2eff and I0 parameter value and error estimation, and gradient and Hessian functions have been added to the exponential curve-fitting C module allowing for more advanced optimisation in the relaxation curve-fitting and dispersion analyses.

Note that this new 3.3 relax series breaks compatibility with old relax scripts. The important change, which is the main reason for starting the relax 3.3.x line, is the renaming of the calc, grid_search and minimise user functions to minimise.calculate, minimise.grid_search and minimise.execute respectively. Please update your scripts appropriately. A new relax feature is that old user function calls are detected in the prompt and script UIs and a RelaxError raised explaining what to rename the user function to.

Important bugfixes in this release include that relax can run on MS Windows systems again, numerous Python 3 fixes, the ability to load Bruker DC files when the file format has corrupted whitespace, the GUI "close all analyses" feature works and no longer raises an error, structure.create_diff_tensor_pdb user function now works when no structural data is present, the geometric prolate diffusion 3D PDB representation in a model-free analysis now aligns with the axis in the PDB as it was previously rotated by 90 degrees, and the Monte Carlo simulations in the relaxation dispersion analysis for exponential curve-fitting for R2eff/R parameter errors is now correct and no longer underestimating the errors by half. For more details about the new features and the bug fixes, please see below. For fully formatted and easy to navigate release notes, please see http://wiki.nmr-relax.com/Relax_3.3.0.

To demonstrate the huge speeds ups in the relaxation dispersion analysis, the following table compares the speed of dispersion models in relax 3.2.3 compared to the new 3.3.0 version:

100 single spins analysis (times in seconds):
Dispersion model relax 3.2.3 timings relax 3.3.0 timings Speed change
No Rex 0.824±0.017 0.269±0.016 3.068x faster.
LM63 1.616±0.017 0.749±0.008 2.157x faster.
LM63 3-site 3.218±0.039 0.996±0.013 3.230x faster.
CR72 2.639±0.042 1.536±0.019 1.718x faster.
CR72 full 2.808±0.027 1.689±0.075 1.663x faster.
IT99 1.838±0.032 0.868±0.011 2.118x faster.
TSMFK01 1.643±0.033 0.718±0.011 2.289x faster.
B14 5.841±0.050 3.747±0.044 1.559x faster.
B14 full 5.942±0.053 3.841±0.044 1.547x faster.
NS CPMG 2-site expanded 8.309±0.066 4.070±0.073 2.041x faster.
NS CPMG 2-site 3D 245.180±2.162 45.410±0.399 5.399x faster.
NS CPMG 2-site 3D full 237.217±2.582 45.177±0.415 5.251x faster.
NS CPMG 2-site star 183.423±1.966 36.542±0.451 5.020x faster.
NS CPMG 2-site star full 183.622±1.326 36.788±0.343 4.991x faster.
MMQ CR72 5.920±0.105 4.078±0.105 1.452x faster.
NS MMQ 2-site 363.659±2.610 82.588±1.197 4.403x faster.
NS MMQ 3-site linear 386.798±4.480 92.060±0.754 4.202x faster.
NS MMQ 3-site 391.195±3.442 93.025±0.829 4.205x faster.
M61 1.576±0.022 0.862±0.009 1.828x faster.
DPL94 22.794±0.517 1.101±0.008 20.705x faster.
TP02 19.892±0.363 1.232±0.007 16.152x faster.
TAP03 31.701±0.378 1.936±0.017 16.377x faster.
MP05 24.918±0.572 1.428±0.015 17.454x faster.
NS R1rho 2-site 244.604±2.493 35.125±0.202 6.964x faster.
NS R1rho 3-site linear 287.181±2.939 68.245±0.536 4.208x faster.
NS R1rho 3-site 290.486±3.614 70.449±0.686 4.123x faster.
Cluster of 100 spins analysis (times in seconds):
Dispersion model relax 3.2.3 timings relax 3.3.0 timings Speed change
No Rex 0.818±0.016 0.008±0.001 97.333x faster.
LM63 1.593±0.018 0.037±0.000 43.401x faster.
LM63 3-site 3.134±0.039 0.067±0.001 47.128x faster.
CR72 2.610±0.047 0.115±0.001 22.732x faster.
CR72 full 2.679±0.034 0.122±0.005 22.017x faster.
IT99 1.807±0.025 0.063±0.001 28.687x faster.
TSMFK01 1.636±0.036 0.039±0.001 42.170x faster.
B14 5.799±0.054 0.488±0.010 11.879x faster.
B14 full 5.803±0.043 0.484±0.006 11.990x faster.
NS CPMG 2-site expanded 8.326±0.081 0.685±0.012 12.160x faster.
NS CPMG 2-site 3D 244.869±2.382 41.217±0.467 5.941x faster.
NS CPMG 2-site 3D full 236.760±2.575 41.001±0.466 5.775x faster.
NS CPMG 2-site star 183.786±2.089 30.896±0.417 5.948x faster.
NS CPMG 2-site star full 183.243±1.615 30.898±0.343 5.931x faster.
MMQ CR72 5.978±0.094 0.847±0.007 7.061x faster.
NS MMQ 2-site 363.138±3.041 75.906±0.845 4.784x faster.
NS MMQ 3-site linear 384.978±5.402 83.703±0.773 4.599x faster.
NS MMQ 3-site 388.557±3.261 84.702±0.762 4.587x faster.
M61 1.555±0.021 0.034±0.001 45.335x faster.
DPL94 22.837±0.494 0.140±0.002 163.004x faster.
TP02 19.958±0.407 0.167±0.002 119.222x faster.
TAP03 31.698±0.424 0.287±0.003 110.484x faster.
MP05 25.009±0.683 0.187±0.007 133.953x faster.
NS R1rho 2-site 242.096±1.483 32.043±0.157 7.555x faster.
NS R1rho 3-site linear 280.778±2.589 62.866±0.616 4.466x faster.
NS R1rho 3-site 282.192±5.195 63.174±0.816 4.467x faster.

Full details of this comparison can be seen in the test_suite/shared_data/dispersion/profiling directory. For information about each of these models, please see the links: http://wiki.nmr-relax.com/No_Rex, http://wiki.nmr-relax.com/LM63, http://wiki.nmr-relax.com/LM63_3-site, http://wiki.nmr-relax.com/CR72, http://wiki.nmr-relax.com/CR72_full, http://wiki.nmr-relax.com/IT99, http://wiki.nmr-relax.com/TSMFK01, http://wiki.nmr-relax.com/B14, http://wiki.nmr-relax.com/B14_full, http://wiki.nmr-relax.com/NS_CPMG_2-site_expanded, http://wiki.nmr-relax.com/NS_CPMG_2-site_3D, http://wiki.nmr-relax.com/NS_CPMG_2-site_3D_full, http://wiki.nmr-relax.com/NS_CPMG_2-site_star, http://wiki.nmr-relax.com/NS_CPMG_2-site_star_full, http://wiki.nmr-relax.com/MMQ_CR72, http://wiki.nmr-relax.com/NS_MMQ_2-site, http://wiki.nmr-relax.com/NS_MMQ_3-site_linear, http://wiki.nmr-relax.com/NS_MMQ_3-site, http://wiki.nmr-relax.com/M61, http://wiki.nmr-relax.com/DPL94, http://wiki.nmr-relax.com/TP02, http://wiki.nmr-relax.com/TAP03, http://wiki.nmr-relax.com/MP05, http://wiki.nmr-relax.com/NS_R1rho_2-site, http://wiki.nmr-relax.com/NS_R1rho_3-site_linear, http://wiki.nmr-relax.com/NS_R1rho_3-site.

For CPMG statistics: 3 fields, each with 20 CPMG points. Total number of dispersion points per spin is 60.

For R experiments: 3 fields, each with 10 spin lock offsets, and each offset has been measured at 5 different spin lock fields. Per field there is 50 dispersion points. Total number of dispersion points per spin is 150.


Download

The new relax versions can be downloaded from http://www.nmr-relax.com/download.html. If binary distributions are not yet available for your platform and you manage to compile the binary modules, please consider contributing these to the relax project (described in section 3.6 of the relax manual, http://www.nmr-relax.com/manual/relax_distribution_archives.html).


CHANGES file

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


Features

  • Huge speed ups for all of the relaxation dispersion models ranging from 1.452x to 163.004x times faster. The speed ups for the clustered spin analysis are far greater than for the single spin analysis.
  • Implementation of a zooming grid search algorithm for optimisation in all analyses. This includes the addition of the minimise.grid_zoom user function to set the zoom level. The grid width will be divided by 2zoom_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 R 2D graph plotting in the relax_disp.plot_disp_curves user function as the X-axis can now be the ν1 value, the effective field ω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/R 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

Bugfixes


Links

For reference, the following links are also part of the announcement for this release:


See also

relax release descriptions