<section begin=description/>
This is a major feature and bugfix release. Features include the new [http://www.nmr-relax.com/manual/structure_pca.html structure.pca user function] for performing a principle component analysis (PCA) of a set of structures, handling of replicated {{:R2eff }} data points in the dispersion analysis, improvements in the handling of PDB structures, the protection against numpy >= ≥ 1.9 FutureWarnings for a number of soon to change behaviours in numpy, and addition of a deployment script for the Google Cloud Computing. Bugfixes include an error when loading relaxation data, the CSA constant equation in the manual, missing information in the relax state and results files, loading of certain state files in the GUI, running relax with no graphical display and using matplotlib, BMRB export failure when a spin container is missing data or parameters.
<section end=description/>
<section begin=features/>
* Many improvements for the compilation of the HTML version of the relax manual (http://www.nmr-relax.com/manual/index.html).
* Updated relax to eliminate all FutureWarnings from numpy >= ≥ 1.9, to future-proof relax against upcoming numpy behaviour changes.* Ability to handle replicated {{:R2eff }} data points by the [http://www.nmr-relax.com/manual/relax_disp_r2eff_read.html relax_disp.r2eff_read user function], but adding 0.001 to the frequency value for the replicated point.
* A new sample script for loading a model-free results file and back-calculating relaxation data.
* Improvements for the handling of PDB structural data.
<section begin=changes/>
* Fix for the rigid frame order model 2nd 2<sup>nd</sup> degree frame order matrix in the manual. The wrong symbol was being used.
* Removed the newparagraph and newsubparagraph definitions from the LaTeX manual. These were causing conflicts with latex2html, preventing the HTML version of the manual at http://www.nmr-relax.com/manual/index.html from being compiled. These definitions are unnecessary for the current set up of the sectioning in the manual.
* Modified the short captions in the new frame models chapter of the manual. The runic Daeg ᛞ character has been replaced simply by 'Daeg'. This is due to incompatibilities with latex2html which prevents the HTML manual at http://www.nmr-relax.com/manual/index.html from being compiled.
* Removal of the definition of a fixed-width table column from the LaTeX manual preamble. This is required as the definition breaks latex2html compatibility, causing a corruption in the figure numbering resulting in the images in the HTML to be essentially randomised.
* Removal of the accents package to allow the HTML manual to be compiled. The 'accents' LaTeX package is not compatible with latex2html, so the easiest fix is to eliminate the package.
* Manually rotated the frame order matrix element EPS manual figures, for latex2html compatibility. The '90 rotate' command has been deleted and the bounding box permuted as 'a b c d' -> 'b -c d -a'. This allows the angle argument in the \includegraphics{} command to be dropped, as latex2html does not recognise this. It allows the figures to be visible in the HTML version of the manual at http://www.nmr-relax.com/manual/index.html .
* Redesign of the frame order parameter nesting table in the manual for latex2html compatibility. The table uses the tikz package, which is fatal for latex2html, even if not used. Therefore the table in the docs/latex/frame_order/parameter_nesting.tex file has been converted into a standalone LaTeX document to create a cropped postscript version of the tikz formatted table. A compilation script has been added as well. The resultant *.ps file is now included into the PCS numerical integration section, rather than this section creating the tikz table. All tikz preamble text has been removed to allow latex2html to run.
* Workaround for latex2html not being able to handle the allrunes package or associated font. In the preamble 'htmlonly' environment, the frame order symbols are redefined using the text 'Daeg' instead of the runic characterᛞ.
* Fixes for sub and superscripts throughout the manual. This introduces {} around all sub and superscripted \textrm{} instances. This is not needed for the PDF version of the manual as the missing bracket problem is avoided, but it affects the HTML version of the manual compiled by latex2html, which requires the correct notation. The fixes are for both the new frame order chapter as well as the relaxation dispersion chapter.
* Editing and fixes for the relax 4.0.0 part of the CHANGES file.
* Increased the Gna! news item sectioning depth in the release checklist document.
* Expanded the description of the [http://www.nmr-relax.com/manual/sequence_attach_protons.html sequence.attach_protons user function]. This follows from http://thread.gmane.org/gmane.science.nmr.relax.user/1849/focus=1855 .
* Added initial data for testing data from Paul Schanda. This will demonstrate that there are several possibilities to enhance the r2eff {{:R2eff}} point method.
* Added the Relax_disp.test_paul_schanda_nov_2015 system test. This will catch the loaning of "nan" values.
* Made additional check in sequence reading, that "nan" values are skipped.
* Making sure that the replicated 4000 Hz point fpr the 950 MHz experiment is not overwritten.
* In the Relax_disp.test_paul_schanda_nov_2015 system test, added a test of counting the {{:R2eff }} values. This shows that the replicated {{:R2eff }} at 950 MHz/4000 Hz point is overwritten. A solution could be to change the dispersion frequency very little, to allow the addition of the data point.
* Expanded a comment about why 1 is subtracted in a test.
* Added further tests to Relax_disp.test_paul_schanda_nov_2015. This will show that replicates of {{:R2eff }} values is not handled well.* In the function of r2eff_read, in data module of the dispersion, added the possibilities to read r2eff {{:R2eff}} values which are replicated. This is done first checking if the dispersion key exists in the r2eff {{:R2eff}} dictionary. If it exists, continue add 0.001 to the frequency until a new possibility exists. This should help handle multiple {{:R2eff }} points, as separate values and not taking any decision to average them.
* Added the expectation of raising an relax error, if trying to plot and no model information is stored.
* Raising an error if plotting dispersion curves, and no model is saved.
* Added a sample script for back-calculating relaxation data from a model-free results file. This is useful when the results file is not the final model, as these results file do not contain the back-calculated data. This is in response to Christina Möller's [https://gna.org/support/?3303 sr #3303] support request.
* Using Gary's lib.float.isNaN() instead of math.isnan(), to have backwards compatibility with python 2.5.
* Fix for spelling mistake and documenting the new behavior of relax_disp.r2eff_read(), when reading r2eff {{:R2eff}} points with the same frequency. If the spin-container already contain r2eff {{:R2eff}} values with the 'frequency of the CPMG pulse' or 'spin-lock field strength', the frequency will be changed by a infinitesimal small value of + 0.001 Hz. This allow for duplicates or more of the same frequency.
* Modified the internal structural object to be less influenced by the format of the PDB. The PDB serial number is now intelligently handled, in that it is reset to 1 when a new model is created. This information is still kept for supporting the logic of the reading of the CONECT records, and will be eliminated in the future. The chain ID information is now no longer stored in the internal structural object, as this information is recreated by the [http://www.nmr-relax.com/manual/structure_write_pdb.html structure.write_pdb user function] based on how the internal structural object has been created.
* Updates to the Noe and Structure system test classes for the internal structural object changes. The serial number can now be reset, and the chain ID information is no longer stored.
* Adding 2 tutorial scripts.
* Fix for small spin ID error in tutorial script.
* Created a system test for catching [https://gna.org/bugs/?24131 bug #24131]. This is the BMRB export failure when the SpinContainer object has no s2 {{:S2}} attribute, as reported by Martin Ballaschk.
* Modified the Mf.test_bug_24131_bmrb_deposition system test to check for the RelaxError. The test results in a RelaxError, as the results file contains no selected spins.
* Added the Mf.test_bug_24131_missing_interaction system test to catch another problem. This is part of [https://gna.org/bugs/?24131 bug #24131], the BMRB export failure with the SpinContainer object having no s2 {{:S2}} value. However the previous fix of skipping deselected spins introduced a new problem of relax still searching for the interatomic interactions for that deselected spin.
<section end=changes/>
* Fix for running relax at a server with no graphical display and using matplotlib. The error was found with the Relax_disp.test_repeat_cpmg system test. And the error generated was: "QXcbConnection: Could not connect to display. Aborted (core dumped)". The backend of matplotlib has to be changed. This is for example described in: http://stackoverflow.com/questions/2766149/possible-to-use-pyplot-without-display http://stackoverflow.com/questions/8257385/automatic-detection-of-display-availability-with-matplotlib.
* Modified the behaviour of the [http://www.nmr-relax.com/manual/bmrb_write.html bmrb.write user function] backend for a model-free analysis (fix for [https://gna.org/bugs/?24131 bug #24131]). This is in the bmrb_write() method of the model-free analysis API. Deselected spins are now skipped and a check has been added to be sure that spin data has been assembled.
* Another fix for [https://gna.org/bugs/?24131 bug #24131]. This is the BMRB export failure when the SpinContainer object has no s2 {{:S2}} attribute. Now no data is stored in the BMRB file if a model-free model has not been set up for the spin. This allows the test suite to pass.* Bug fix to allow the Mf.test_bug_24131_missing_interaction system test to pass. This is part of [https://gna.org/bugs/?24131 bug #24131], the BMRB export failure with the SpinContainer object having no s2 {{:S2}} value. The problem was when assembling the diffusion tensor data. The spin_loop() function was being called, as the diffusion tensor is reported for all residues. Therefore the skip_desel=True has been added to match the model-free part.
<section end=bugfixes/>