Open main menu

Changes

Relax 4.0.0

3,811 bytes added, 20:40, 8 October 2020
m
→‎Links: Fix the broken Gna! forum link by switching to {{gna link}}.
{{lowercase title}}
{{infobox relax release| version = 4.0.0| prev = 3.3.9| next = 4.0.1| keywords = Frame order theory| type = Major feature| date = 7 October 2015| manual = yes}} == Description ==
<section begin=description/>
This is a major feature release for a new analysis type labelled 'frame order'. The frame order theory aims to unify all rotational molecular physics data sources via a single mechanical model. It is a bridging physics theory for rigid body motions based on the statistical mechanical ordering of reference frames. The previous analysis of the same name was an early iteration of this theory that was however rudamentary and non-functional. Its current implementation is for analysing RDC and PCS data from an internal alignment to interpret domain or other rigid body motions within a molecule or molecular complex.
<section end=description/>
== Download ==
<section begin=download/>
<section end=download/>
== CHANGES file ==
<section begin=metadata/>
<section end=metadata/>
=== Features ===
<section begin=features/>
<section end=features/>
=== Changes ===
<section begin=changes/>
* Updated the CaM frame order test model superimposition script. The [http://www.nmr-relax.com/manual/structure_superimpose.html structure.superimpose user function] is now correctly called. The output log file has been added to the repository as it contains the correct translation and Euler rotation information needed for the test models.
* Parameter update for the isotropic cone CaM frame order test model optimisation script. The Euler angles for the rotation about the motional pivot have been replaced by the translation vector and Euler angle CoM rotation parameters.
* Fix for a number of the frame order models which do not have parameter constraints. The [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html#linear_constraints linear_constraint() function] was returning A, b = [], [] for these models, but these empty numpy arrays were causing the [https://gna.org/projects/{{minfx/ homepage}} minfx library] to fail. These values are now caught and the constraint algorithm turned off in the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#minimise minimise() specific API method].
* Increased the precision of all the data in the CaM frame order test data generation base script. These have all been converted from float16 to float64 numpy types.
* Fix for the RDC error setting in the CaM frame order test data generation base script. The rdc_err data structure is located in the interatomic data containers, no the spin containers.
* Fix for the pivots created by the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot specific_analyses.frame_order.data.generate_pivot() function]. This is for the double rotor model where the 1<sup>st</sup> mode of motion is about the 2<sup>nd</sup> pivot, and the 2<sup>nd</sup> mode of motion about the 1<sup>st</sup> pivot.
* Fixes for the cone geometric representation in the internal structural object. The representation can now be created if the given [http://www.nmr-relax.com/api/4.0/data_store.mol_res_spin.MoleculeContainer-class.html MoleculeContainer object] is empty.
* Refactored the frame order geometric motional representation code. The code of the specific_analyses.frame_order.geometric.[http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#create_geometric_rep specific_analyses.frame_order.geometric.create_geometric_rep() function] has been spun out into 3 new functions: [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_rotors add_rotors()], [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_axes add_axes()], and [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_cones add_cones()]. This is to better isolate the various elements to allow for better control. Each function now adds the atoms for its geometric representation to a separate molecule called 'axes' or 'cones'. The add_rotors() does not create a molecule as the [http://www.nmr-relax.com/api/4.0/lib.structure.represent.rotor-module.html#rotor lib.structure.represent.rotor.rotor_pdb() function] creates its own. As part of the rafactorisation, the neg_cone flag has been eliminated.
* Renamed the residues of the rotor geometric object representation. The rotor axis atoms now belong to the RTX residue and the propeller blades to the RTB residue. The 'RT' at the start represents the rotor and this will allow all the geometric objects to be better isolated.
* Improvements to the [http://www.nmr-relax.com/api/4.0/lib.structure.internal.object.Internal-class.html#_get_chemical_name internal structural object _get_chemical_name() method]. This now uses a translation table to convert the hetID or residue name into a description, for example as used in the PDB HETNAM records to give a human readable description of the residue inside the PDB file itself. The new rotor RTX and RTB residue names have been added to the table as well.
* Added a script for profiling the target function calls of the pseudo-ellipse frame order model.
* Added a timeit script and log file showing how numpy.cos() is 10 times slower than math.cos(). This is for single floats.
* Shifted the calculation of the &theta;<supsub>max</supsub> cone opening for the pseudo-ellipse outside of all loops. This is infrastructure change for potentially eliminating all of the looping for the PCS numeric integration in the future. It however slightly speeds up the pseudo-ellipse frame order model. Using 500 target function calls in the profiling_pseudo_ellipse.py script in test_suite/shared_data/frame_order/timings/, the time spent in the [http://www.nmr-relax.com/api/4.0/lib.frame_order.matrix_ops-module.html#pcs_pivot_motion_full_qr_int pcs_pivot_motion_full_qrint() function] decreases from 20.849 to 20.719 seconds.* Converted the torsionless pseudo-ellipse model to also use the [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse-module.html#tmax_pseudo_ellipse_array tmax_pseudo_ellipse_array() function]. This allows the calculation of the pseudo-elliptic cone opening &theta;<supsub>max</supsub> to be shifted outside of all loops.
* Created a profiling script and log file for the isotropic cone frame order model. This shows where the slow points of the model are, using 2000 target function calls.
* Increased the function call number to 500 in the pseudo-ellipse frame order model profiling script. The profiling log file has also been added to show where the slowness is - specifically that the numeric PCS integration takes almost the same amount of time as the RDC frame order matrix construction using the scipy.integrate.quad() function.
* Sent the verbosity argument to the minfx.grid.grid_split() function for the frame order analysis. This matches the relax trunk changes for the model-free analysis. The minfx function in the next release (1.0.8) will now be more verbose, so this will help with user feedback when running the model-free analysis on a cluster or multi-core system using MPI.
* Improvements for the parallelised grid search for the frame order analysis. As each grid point can take wildly different numbers of CPU cycles to calculate the chi-squared value for, the result of subdividing the grid search was that some subdivisions where incredibly quick while others required much larger amounts of time. To avoid this bad slave management, the grid points are now randomised. This means that the subdivisions will require about the same amount of time to optimise.
* Moved the setup of the target function data structures in the frame order analysis. This is for the [http://www.nmr-relax.com/manual/grid_search.html grid_search] and [http://www.nmr-relax.com/manual/minimise.html minimise] user functions. The target function data setup function has been renamed to [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#target_fn_data_setup target_fn_data_setup()]. This is now called before the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation.Frame_order_grid_command-class.html Frame_order_grid_command] and [[http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation.Frame_order_minimise_command-class.html Frame_order_minimise_command] multi-processor objects are initialised, and all of the data is now passed into these functions. Although the code is uglier, this has the benefit that the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#target_fn_data_setup target_fn_data_setup() function] will only be called once. This data setup requires a lot of time, so for a large cluster, this can be a large time saving for the grid search.
* Modified the frame_order_free_start.py script to better mimic the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis].
* Updated the frame order optimisation results for the 2<sup>nd</sup> CaM free rotor test data. The optimisation in the frame_order.py is now of higher precision with the number of Sobol' numeric integration points significantly increased, especially for the Monte Carlo simulations. The new frame order representation files have been added to the repository, as well as the intermediate state files.
* Fix for the frame order optimisation target setup printouts. The 'Numerical integration: ' printout was fixed to 'Quasi-random Sobol' sequence'. This now changes to 'SciPy quadratic integration' if cdp.quad_int is set. The text 'PCS' has also been added for clarification.
* Removed the call to the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] for the rigid model in the auto-analysis. There is no motion to simulate in the rigid model, so the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] has no use.
* Improvements, fixes, and expansion of the results and data visualisation file creation. This is for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Frame_order_analysis-class.html#results_output visualisation() method has been renamed to results_output()] and its scope expanded. The function previously only called the [http://www.nmr-relax.com/manual/frame_order.pdb_modelframe_order_pdb_model.html frame_order.pdb_model] and [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate] user functions for creating PDB representations of the frame order motions and performing a pseudo-Brownian frame order dynamics simulate. This has been extended to also call the [http://www.nmr-relax.com/manual/results_write.html results.write user function] for outputting results files and the [http://www.nmr-relax.com/manual/rdc_corr_plot.html rdc.corr_plot] and [http://www.nmr-relax.com/manual/pcs_corr_plot.html pcs.corr_plot] for generating correlation plots of the measured vs. back-calculated data. All parts of the auto-analysis were output files are required now call this method. This ensures that all output files are always created, and are placed into the correct directories.
* Improvements for the sectioning printouts for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The sections now use the [http://www.nmr-relax.com/api/4.0/lib.text.sectioning-module.html lib.text.formatting] [http://www.nmr-relax.com/api/4.0/lib.text.sectioning-module.html#subtitle subtitle()] and [http://www.nmr-relax.com/api/4.0/lib.text.sectioning-module.html#subsubtitle subsubtitle()] functions to distinguish them from the output of all the user functions, which use the [http://www.nmr-relax.com/api/4.0/lib.text.sectioning-module.html#section section()], [http://www.nmr-relax.com/api/4.0/lib.text.sectioning-module.html#subsection subsection()] and [http://www.nmr-relax.com/api/4.0/lib.text.sectioning-module.html#subsubsection subsubsection()] functions. New sectioning printouts have been added for clarity.
* Possible fixes for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This is just in case a user decides to not perform the optimisation starting with a PCS subset. In this case, the analysis will now execute correctly.
* Created the Grace graphs for the double rotor model 1<sup>st</sup> degree frame order matrix. These are the values calculated directly from the [http://www.nmr-relax.com/api/4.0/lib.frame_order-module.html lib.frame_order modules]. The graphs were previously all zeros.
* Recreated all of the simulated pseudo-ellipse frame order matrix element graphs. These are now in the Kronecker product notation so that they will match the graphs calculated using the [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse-module.html relax lib.frame_order.pseudo_ellipse module].
* Fix for the [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse-module.html#part_int_daeg1_pseudo_ellipse_22 pseudo-ellipse 1<sup>st</sup> degree frame order matrix Daeg22 ᛞ<sub>22</sub> element].
* Updated all of the pseudo-ellipse 1<sup>st</sup> degree frame order matrix graphs for the recent fix.
* Converted the Sobol' rotation matrices to float32 in the frame order target function. This is to conserve huge amounts of memory to allow for more Sobol' points to be used. For example for the models which use 3D Sobol' points (isotropic cone and pseudo-ellipse), a maximum of 50000 Sobol' points requires 50000000 to be created, using about 15 Gb of RAM.
* Introduced the nested_params_ave_dom_pos argument to the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This allows the average domain position to be set to no rotations and translations rather than taking the average position from the rotor or free-rotor model. This can be useful when large motions are present causing the rigid model to have unreasonable domain positions.
* Fix for the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function] description to allow the manual to be compiled. The table caption containing the user function name was causing the LaTeX compilation to fail. Therefore the captions have been rewritten to avoid the user function name.
* Modified the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#check_chi2 frame order system test check_chi2() method ] to test the [http://www.nmr-relax.com/manual/statistics_model.html statistics.model user function]. This causes all of the Frame_order.test_cam_* system tests to fail, as the user function backend is not implemented for the frame order analysis.* Implemented the frame order analysis backend for the [http://www.nmr-relax.com/manual/statistics_model.html statistics.model] and [http://www.nmr-relax.com/manual/statistics_aic.html statistics.aic] user functions. This simply required aliasing the specific analysis API common [http://www.nmr-relax.com/api/4.0/specific_analyses.api_common.API_common-class.html#_get_model_container_cdp _get_model_container_cdp() method ] to get_model_container().* Bug fix for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#base_data_loop frame order specific analysis API base_data_loop() method]. This was looping over non-existent PCS and RDC data. Now the alignment ID is checked for in the interatomic data container 'rdc' data structure and the spin container 'pcs' data structure, as well as values of None, before yielding the data.* Created a large set of system tests for implementing the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function]. This user function will be similar to [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate]. However instead of creating a PDB file with models from a pseudo-Brownian simulation, the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function] will generate a PDB file of models forming a uniform distribution of structures covering the full frame order motional space. The new system tests are: Frame_order.test_distribute_double_rotor_mode1_xz_plane_tilt, Frame_order.test_distribute_double_rotor_mode1_z_axis, Frame_order.test_distribute_double_rotor_mode2_xz_plane_tilt, Frame_order.test_distribute_double_rotor_mode2_z_axis, [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_free_rotor_z_axisFrame_order.test_distribute_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_iso_cone_z_axis Frame_order.test_distribute_iso_cone_z_axis], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_iso_cone_xz_plane_tiltFrame_order.test_distribute_iso_cone_xz_plane_tilt], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_iso_cone_torsionless_z_axisFrame_order.test_distribute_iso_cone_torsionless_z_axis], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_pseudo_ellipse_xz_plane_tiltFrame_order.test_distribute_pseudo_ellipse_xz_plane_tilt], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_pseudo_ellipse_z_axisFrame_order.test_distribute_pseudo_ellipse_z_axis], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_pseudo_ellipse_free_rotor_z_axisFrame_order.test_distribute_pseudo_ellipse_free_rotor_z_axis], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_pseudo_ellipse_torsionless_z_axisFrame_order.test_distribute_pseudo_ellipse_torsionless_z_axis], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_distribute_rotor_z_axisFrame_order.test_distribute_rotor_z_axis]. These are aliases for the equivalent Frame_order.test_simulate_* system tests which have had the 'type' keyword argument added, defaulting to 'sim', which allows to switch between the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate] and [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute] user functions. The concept behind these system tests are the same for both user functions, so the code is shared.
* Created the front-end of the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function]. This is a copy and modification of the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function], as the concepts are similar.
* Small modification of the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. The GUI file opening dialog wildcard selectors are now set to all PDB file types (plain text, bzip2 compressed, and gzip compressed).
* Added the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function] to the auto-analysis results output. This will allow both the pseudo-Brownian simulation and uniform distribution PDB files to be available to the user in all results directories (excluding the intermediate results for speed).
* Implemented the back-end of the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function]. This follows the design of the pseudo-Brownian simulation [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. The [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.uf-module.html#distribute specific_analyses.frame_order.uf.distribute() function ] has been created as a modified copy of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.uf-module.html#simulate simulate() function ] of the same module. This simply performs checks and assembles the data, passing into the new [http://www.nmr-relax.com/api/4.0/lib.frame_order.simulation-module.html#uniform_distribution lib.frame_order.simulate.uniform_distribution() function], which itself is a modified copy of the [http://www.nmr-relax.com/api/4.0/lib.frame_order.simulation-module.html#brownian brownian() function] in the same module.
* Introduced the max_rotations argument into the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function]. This is used to prevent the user function from running forever. This happens whenever a cone opening angle or torsion angle is zero, and hence the random sampling of the rotational space will never find rotations within the motional distribution.
* Improved control of the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function] in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The maximum number of rotations can now be set, and the argument for the total states for the distribution has been shortened.
* Fix of a fatal bug preventing the frame order analysis to be run on a multi-processor system. The multi-processor code was calling the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() function] of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html specific_analyses.frame_order.optimisation module] to give feedback when calling the [http://www.nmr-relax.com/manual/minimise_execute.html minimise.execute] or [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate] user functions. However this was run in the slave command run() method, hence would be executed on the slave. The problem is that [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points()] performs a number of checks on the current data pipe, however the slaves do not have any data pipes set up.
* Added the new 'atom_id' argument to the [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function]. This uses the new inverse selection functionality recently introduced into the trunk to delete all structural data not matching the atom_id from the copy of the loaded structural data string prior to generating the distribution of structures.
* Bug fix for the frame order target function (introduced recently). The copy.deepcopy() function is now used for all numpy input data to avoid the data from being modified between function calls. This is important for missing RDC and PCS data which is sent in as NaN values. In the [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#__init__ target function __init__() method], the NaN values are replaced by 0.0 after the self.missing_rdc and self.missing_pcs structures have been by checking for NaN values. However the recent [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html specific_analyses.frame_order.optimisation ] change in the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation.Frame_order_minimise_command-class.html Frame_order_minimise_command slave command] to printout the number of integration points resulted in the target function being initialised twice, causing all NaN values to be 0.0 in the second initialisation. Hence all missing data was being treated as real data with values of 0.0.
* Created a new skeleton chapter in the relax manual for the frame order analysis.
* Added a theory section to the new frame order chapter. This is taken from an in-preparation supplement.
* Removed the printout of pylint STDERR messages in the find_unused_imports.py developer script.
* Elimination of a number of wildcard imports from some frame order timing scripts. This is to avoid excessive function imports.
* Removal of an unused import from the [http://www.nmr-relax.com/api/4.0/user_functions.frame_order-module.html user_functions.frame_order module].
* Removal of unused imports from the test_suite/shared_data/frame_order/simulation scripts.
* Updated some unused frame order scripts to use the new minimise user function design.
* Unused import cleanup of all scripts in the test_suite/shared_data/dispersion/ directories. This both removes unused imports, or uncomments but deactivates temporarily unused code.
* Removed unused imports from the scripts in the test_suite/shared_data/frame_order subdirectories.
* Removed unused imports from the Spectrum [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.spectrum-module.html spectrum system test base module].* Removed unused imports from the Relax_disp [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.relax_disp-module.html relax_disp system test base module].
* Clean up of all unused imports in the system test scripts.
* Removed unused imports from the Structure [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.structure-module.html structure system test base module].* Changed how the import of [http://www.nmr-relax.com/api/4.0/lib.regex-module.html lib.regex ] in the Test_regex [http://www.nmr-relax.com/api/4.0/test_suite.unit_tests._lib.test_regex-module.html test_regex unit tests ] is used. The module is no longer stored in the TestCase class namespace, but is rather called directly within the unit test.* Changed the import of [http://www.nmr-relax.com/api/4.0/pipe_control.state-module.html pipe_control.state ] in the [http://www.nmr-relax.com/api/4.0/test_suite.unit_tests._pipe_control.test_state-module.html test_state unit test module].
* Removed unused imports from the unit tests.
* Added another exception to the find_unused_imports.py devel script. This is for the [http://www.nmr-relax.com/api/4.0/test_suite.unit_tests._lib._geometry.test_rotations -module .html test_suite.unit_tests._lib._geometry.test_rotations module] which programatically obtains the imports using globals().* Added a workaround or hack for exceptions for circular imports in the find_unused_imports.py script. This is currently for the [http://www.nmr-relax.com/api/4.0/test_suite.unit_tests._lib.test___init__ -module.html test_suite.unit_tests._lib.test___init__] and [http://www.nmr-relax.com/api/4.0/test_suite.unit_tests._lib._geometry.test___init__-module.html test_suite.unit_tests._lib._geometry.test___init__ ] modules.* Removal of unused imports from the [http://www.nmr-relax.com/api/4.0/test_suite.gui_tests-module.html GUI test modules].* Removed all unused imports from the [http://www.nmr-relax.com/api/4.0/pipe_control-module.html pipe_control package].* Added import exceptions for the [http://www.nmr-relax.com/api/4.0/lib.compat -module .html lib.compat module] in the find_unused_imports.py devel script.* Added import exceptions for the [http://www.nmr-relax.com/api/4.0/lib.xml -module .html lib.xml module] in the find_unused_imports.py devel script. These are needed because of eval() function calls on XML stored Python data structures.* Removed all unused imports from the [http://www.nmr-relax.com/api/4.0/lib-module.html relax library package].* Removed all unused imports from the [http://www.nmr-relax.com/api/4.0/target_functions-module.html target_functions package].
* Removed unused imports from the developer scripts.
* Removed all unused imports from the [http://www.nmr-relax.com/api/4.0/specific_analyses-module.html specific_analyses package].* Removed all unused imports from the [http://www.nmr-relax.com/api/4.0/auto_analyses-module.html auto_analyses package].
* Removed all unused imports from the numdifftools extern package.
* Removal of the last unused import from the [http://www.nmr-relax.com/api/4.0/target_functions-module.html target_functions package].
* Fix for the PCS system tests on old Python versions. The self.assertAlmostEqual() function cannot compare None values in earlier Python versions.
* MS Windows fix for the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_generate_rotor2_distribution Frame_order.test_generate_rotor2_distribution system test]. The locale.setlocale() function call for correctly setting up a spinning progress meter was failing on MS Windows. The error is now caught and the local setting skipped.
* Added Python 3.5 to the manual C module compilation script.
* Added Python 3.5 to the Python multiversion test suite script.
<section end=changes/>
=== Bugfixes ===
<section begin=bugfixes/>
<section end=bugfixes/>
== Links ==
<section begin=links/>
* [http://wiki.nmr-relax.com/Relax_4.0.0 Official release notes on the relax wiki].
* [https://{{gna link|url=gna.org/forum/forum.php?forum_id=2514 |text=Gna! news item]}}.
* [http://article.gmane.org/gmane.science.nmr.relax.announce/68 Gmane mailing list archive].
* [http://www.mail-archive.com/relax-announce%40gna.org/msg00059.html The Mail Archive].
* [https://mail.gna.org/public/relax-announce/2015-10/msg00001.html Local archives].
* [https://marc.info/?l=relax-announce&m=144376869310289144485916126262&w=2 Mailing list ARChives (MARC)].
{{:Softpedia}}
<section end=links/>
== Announcements ==
{{:relax release announcements}}
== See also ==
* [http://www.nmr-relax.com/api/4.0/ The relax 4.0 API documentation]
{{:relax release see also}}
[[Category:Relaxation dispersion Frame order analysis]]
Trusted, Bureaucrats
4,223

edits