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