* Modified the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html#assemble_param_vector specific_analyses.frame_order.parameters.assemble_param_vector() function]. This can now handle the case of no parameters being present. The corresponding elements of the numpy array will consist of NaN values.
* Better handling of unset parameters in the frame order optimisation functions. The [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#target_fn_data_setup specific_analyses.frame_order.optimisation.target_fn_data_setup()] and [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html#assemble_param_vector specific_analyses.frame_order.parameters.assemble_param_vector() function] both now accept the unset_fail argument. This is set in both the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#calculate calculate() ] and [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#minimise minimise() ] API methods. When set, a RelaxError will be raised in the assemble_param_vector() function when a parameter has not been set yet. This together with previous changes will prevent the frame order analysis from using 0.0 as a starting value for unset parameters.
* Fixes for all of the Frame_order.test_rigid_data_to_*_model system tests. The base script now sets all parameter values so that the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function] can operate. The two free rotor model chi-squared values have been updated as these are sensitive to the motional eigenframe parameter values - these models can never approximate a rigid state.
* Modified the optimisation of the rigid model in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The grid search is now implemented as a zooming grid search.
* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_sobol_setup3 Frame_order.test_num_int_pts3 system test]. This checks the operation of the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.num_int_pts user function] when the model has been and the frame order parameters have been set up.
* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points Frame_order.test_count_sobol_points system test]. This will test that the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.num_int_pts user function] can correctly count the number of Sobol' integration points used for the current set of parameter values. This [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.num_int_pts] functionality does not exist yet.
* Implementation of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points specific_analyses.frame_order.optimisation.count_sobol_points() function]. This is used by the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.num_int_pts user function] to provide a printout of the number of Sobol' integration points used for the current parameter values. This is to provide user feedback so that it is know if enough Sobol' points have been used.
* Modified the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points Frame_order.test_count_sobol_points system test]. The number of points has been massively decreased as generating Sobol' points takes a long time, and the check for the number of used Sobol' points has been set to the real value.
* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points2 Frame_order.test_count_sobol_points2 system test]. This checks the operation of the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function]. As this user function has not been implemented yet, the test currently fails.* Created the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function]. This is simply a frontend to the new [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points specific_analyses.frame_order.optimisation.count_sobol_points() function].* Updated the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points2 Frame_order.test_count_sobol_points2 system test ] for the correct number of Sobol' points.* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points_rigid Frame_order.test_count_sobol_points_rigid system test]. This is to demonstrate a failure of the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.test_count_sobol_points user function] when applied to the rigid frame order model.
* Fix for the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] for the rigid model. This model is now caught at the start, a message printed out, and the function exited.
* Fix for the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points_rigid Frame_order.test_count_sobol_points_rigid system test]. This now checks that cdp.used_sobol_points does not exist for the rigid frame order model after a call to the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function].* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points_rotor Frame_order.test_count_sobol_points_rotor system test]. This is to test the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] for the rotor model.
* Fix for the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] for the rotor model. The σ angles unpacking required a dimensionality collapse in the Sobol' angle data structure.
* Updated the number of points to allow the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points_rotor Frame_order.test_count_sobol_points_rotor system test ] to pass.* The [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function ] is now being called by all of minimise user functions. This occurs at the end of 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 function backends to provide more feedback to the user as to the quality of the optimisation. To avoid initialising the target function twice, the count_sobol_points() function now accepts the initialised target function as an optional argument.* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points_free_rotor Frame_order.test_count_sobol_points_free_rotor system test]. This is to demonstrate that the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] currently fails for the free-rotor model.
* Fix for the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] for the free-rotor models. The torsion angle is now correctly handled as the 3 free-rotor models do not have cdp.cone_sigma_max set.
* Updated the number of points in the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points_free_rotor Frame_order.test_count_sobol_points_free_rotor system test]. This is to allow the test to pass.* Fix for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function]. The checks for the model, parameter and domain set up must come first, before cdp.model is accessed. Otherwise the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.num_int_pts user function] will often fail.* Fix for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function]. The free-rotor isotropic cone model was incorrectly handled, as the cone parameter is 'cone_s1' and not 'cone_theta'. The order parameter is now converted to an angle before checking if the Sobol' point is outside of the cone or not.* More fixes for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function]. The torsion angle for the torsionless models is no longer accessed, and the cone_theta parameter is only accessed for models with this parameter.* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points_iso_cone_free_rotor Frame_order.test_count_sobol_points_iso_cone_free_rotor system test]. This is to test the [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] for the free-rotor isotropic cone model.* Fix for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function]. The torsion angle ranges from -π to π, so the absolute value needs to be checked, just as in the [http://www.nmr-relax.com/api/4.0/lib.frame_order-module.html lib.frame_order modules].
* Updates for the number of Sobol' points in the Frame_order.test_count_sobol_points_* system tests. This is simply to allow all Frame_order system tests to pass.
* Redesigned the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.num_int_pts user function] frontend for the oversampling idea. The use of the quasi-random Sobol' sequence for numerical PCS integration will be modified to use the concept of oversampling. Instead of specifying the exact number of points in the Sobol' sequence and then removing points outside of the current parameter values, the algorithm will oversample as N * Ov * 10<sup>M</sup>, where N is the maximum number of Sobol' points to be used for the integration, Ov is the oversampling factor, and M is the number of dimensions or torsion-tilt angles used in the system. The aim is to try to use the maximum number of points N for all frame order models and all ranges of dynamics.
* Renamed the frame_order.num_int_pts user function to [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup]. The user function no longer specifies the number of integration points. Instead it now specifies the maximum number of points N and oversampling factor Ov used to generate the oversampled Sobol' sequence.
* Implemented the Sobol' sequence oversampling in the frame order target function class.
* Converted all of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order-module.html specific_analyses.frame_order package ] to the Sobol' point oversampling design. The correct values are now sent into the target function and all references to cdp.num_int_pts has been replaced with the cdp.sobol_max_points and cdp.sobol_oversample pair of variables. The [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] backend has also been updated to show the total number of oversampling points and the number of points used.
* The [http://www.nmr-relax.com/manual/frame_order_count_sobol_points.html frame_order.count_sobol_points user function] now shows more information. The maximum number and oversampling factors are now also printed out for maximum user feedback.
* Improved the printout formatting for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() frame order function].
* The frame order target function now passes the maximum number of Sobol' points to the relax library. The value is being passed into the lib.frame_order.*.pcs_numeric_int_*() functions, though it is not used set.
* Fix for the percentage calculation for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function].
* Changed the creation of the Sobol' points in the frame order target function. For increased accuracy of the numerical PCS integration, the first 1000 points of the Sobol' sequence are now skipped to avoid any bias. For speed, the axis order of the Sobol' torsion-tilt angles has been swapped so that the numpy.swapaxes() function call is no longer required in the lib.frame_order.*.pcs_numeric_int_*() functions.
* Updated the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function ] to handle the swapped axis order.* Huge speedup for the generation of the Sobol' sequence data in the frame order target function. The new [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Sobol_data-class.html Sobol_data class ] has been created and is instantiated in the module namespace as target_function.frame_order.sobol_data. This is used to store all of the Sobol' sequence associated data, including the torsion-tilt angles and all corresponding rotation matrices. When initialising the target function, if the Sobol_data container holds the data for the same model and same total number of Sobol' points, then the pre-existing data will be used rather than regenerating all the data. This can save a huge amount of time.* Updated the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function ] to use the new [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Sobol_data-class.html Sobol_data container]. The Sobol' sequence data generated by the target function is now located at target_functions.frame_order.sobol_data.
* Updated all the lib.frame_order.*.pcs_numeric_int_*() functions for the new Sobol' point algorithm. The functions now all accept the max_points argument and terminate the loop over the Sobol' points once the maximum number of points has been reached. The calls to numpy.swapaxes() have also been removed as this is now pre-performed by the target function initialisation.
* Changed the default oversampling factor from 100 to 1 in the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function].
* Converted the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] to use the new [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function] design. The [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html auto-analysis Optimisation_settings object] has also been modified so that all num_int_pts arguments and internal structures have been split into the two new sobol_max_points and sobol_oversample names and objects.
* Fix for the rigid frame order model for the recent [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function] changes. For this model, the number of Sobol' points normally is does not exist. This is now correctly handled.
* Created the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Frame_order_analysis-class.html#sobol_setup sobol_setup() method ] for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This is used to correctly handle the new design of the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function] consistently throughout the protocol.
* Updated the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_auto_analysis Frame_order.test_auto_analysis system test] script. This now uses the new [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html auto-analysis Optimisation_settings object] design.
* Updated the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points Frame_order.test_count_sobol_points system test]. The call to the frame_order.num_int_pts user function was changed to [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup].
* Fixes for the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_count_sobol_points2 Frame_order.test_count_sobol_points2 system test]. The test_suite/shared_data/frame_order/axis_permutations/cam_pseudo_ellipse.bz2 relax state file has been manual edited to change the num_int_pts data pipe structure to sobol_max_points and to add the new sobol_oversample variable.
* Added a backwards compatibility hook for state and results files for the Sobol' sequence changes. The data pipe num_int_pts variable is now renamed to sobol_max_points when present, and the sobol_oversample variable is created and set to 1.
* Updates to all of the Frame_order.test_count_sobol_points_* system tests. The [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function] is used to set a small maximum number of points (20) to allow the tests to be fast. The value of 20 is also checked for to allow the tests to pass.
* Renamed the cdp.used_sobol_points variable to sobol_points_used. This is created by the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() frame order function]. The name change is to match the sobol_max_points and sobol_oversample variable names.
* Renamed all the Frame_order.test_num_int_pts* system tests to Frame_order.test_sobol_setup*. These system tests where for checking the operation of the old frame_order.num_int_pts user function. But this is now the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function].
* Fix for all of the Frame_order.test_rigid_data_to_*_model system tests. The frame_order.num_int_pts user function call was changed to [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup].
* Updated the χ<sup>2</sup> check in the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_rigid_data_to_free_rotor_model Frame_order.test_rigid_data_to_free_rotor_model system test]. This value has changed due to the first 1000 points of the Sobol' sequence being skipped.
* Fixes for all of the lib.frame_order.*.pcs_numeric_int_*_qrint() functions. The loop over the Sobol' points was broken. As numpy.swapaxes() has been applied to the points argument already, the loop needs to be over the second dimension of the points data structure.
* Updates for all of the Frame_order.test_cam_* system tests. The NUM_INT_PTS variable in the system tests scripts is now passed into the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function] as the max_num argument. This number has also been changed so that the tests take a reasonable amount of time. All χ<sup>2</sup> value checks were updated. These were validated by increasing the number of integration points and watching the χ<sup>2</sup> value of the Frame_order.test_cam_*_pcs version of the system tests head to zero.
* Another update for the χ<sup>2</sup> check in the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_rigid_data_to_free_rotor_model Frame_order.test_rigid_data_to_free_rotor_model system test]. The previous commit used an incorrect value for the χ<sup>2</sup>. This new value is now much closer to the original.* Turned down the verbosity of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html#update_model update_model() frame order function]. The verbosity flag is now accepted and set to zero by the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#get_param_values get_param_names() API method ] and [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html#param_num specific_analyses.frame_order.parameters.param_num() function]. This removes a lot of useless printouts from many different user functions.* Introduced the verbosity argument to the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() frame order function]. This is used to turn the printouts on or off. The optimisation code now calls this function with the verbosity argument sent into the [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. Hence the printouts are suppressed for Monte Carlo simulations.* Removed the axis system printout from the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. This is for the geometric representation of the frame order dynamics. The axis system is printed out as the rotation matrix used for the [http://www.nmr-relax.com/api/4.0/lib.structure.geometric-module.html#generate_vector_residues lib.structure.geometric.generate_vector_residues() function ] later on anyway. The change is to simplify the printouts.
* Editing of the docstring of the [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup user function].
* Fix for the frame order system test optimisation printouts. The cdp.num_int_pts variable is now called cdp.sobol_max_points.
* The starting time of the axis permutation model optimisations is now output. This is in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This call to the [http://www.nmr-relax.com/manual/time.html time user function] occurred for the normal models, so extending it to the permuted axes models makes the output more consistent.
* Simplified the atomic position averaging warning in the frame order analysis. Instead of throwing a warning for each spin, one warning for all spins is now given. This should make the output a lot less verbose.
* The frame order [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#minimise_setup_atomic_pos minimise_setup_atomic_pos() function ] now accepts the verbosity argument. This is used to silence the warnings in user functions such as [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.sobol_setup]. * Improvements for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#overfit_deselect frame order overfit_deselect() API method]. Three changes have been made: The print statements have been converted to RelaxWarnings; The spin IDs or spin ID pairs are now stored in a list and one RelaxWarning for the missing PCS data and one for the missing RDC data is now given; And the verbose flag is now used to determine if a RelaxWarning will be given.* Change to the position averaging warning in the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#minimise_setup_atomic_pos minimise_setup_atomic_pos() frame order function].
* Improvements for the printout from the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html#update_model update_model() frame order function]. A list of updated parameters is now created and everything is printed on a single line at the end. The printout is therefore much more compact.
* Spun out part of the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] into the new [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. The new user function arguments required for properly creating the pseudo-Brownian dynamics simulation would have made the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] too complicated. Therefore this part has been spun out into the new [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. The frame_order.simulate frontend fully describes the algorithm that will be used to simulate the dynamic content of the PCS and RDC data, and warns that not all modes of motion are visible and present.
* Small fix for the new [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] backend.
* Updated the base script for the Frame_order.test_cam_* system tests. The [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] is now called directly after the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function].
* Created the backend framework for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. The backend [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.uf-module.html#simulate specific_analyses.frame_order.uf.simulate() function ] performs all data checks required, prepares the output file object, assembles the frame order parameter values and pivot point, and creates a copy of the structural object object with the ensemble collapsed into a single model. All this data is then passed into the new [http://www.nmr-relax.com/api/4.0/lib.frame_order.simulation-module.html#brownian lib.frame_order.simulation.brownian() function]. This initialises all required data structures and the structural object. The main loop of the simulation is also implemented, taking snapshots at every fixed number of steps and terminating the loop once the total number of snapshots are reached. The snapshot consists of copying the original unrotated structural model and rotating it into the new position. The rotation is currently the identity matrix. The old specific_analyses.frame_order.geometric.create_distribution() stub function has been deleted.
* Decreased the time required for the Frame_order.test_cam_* system tests. The [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] now only creates a total of 20 snapshots rather than 1000.
* Added new arguments to the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. These are the brownian_step_size, brownian_snapshot and brownian_total arguments which are passed directly into the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. This gives the user more control, as well as allowing the test suite to speed up this part of the analysis.
* Huge speedup for the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_auto_analysis Frame_order.test_auto_analysis system test]. The pseudo-Brownian dynamics simulation via the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] has been massively sped up to allow the test to be almost as fast as before.
* Spun out the code for shifting to the average frame order position into a new function. The old code of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#create_ave_pos create_ave_pos()] of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html specific_analyses.frame_order.geometric module] has been shifted into the new [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#average_position average_position() function]. This will allow the code to be reused by other parts of relax to obtain the average frame order structures.* Implemented the shifting to the average position for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] backend. This simply sends the structural object into the new [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#average_position average_position() function ] of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html specific_analyses.frame_order.geometric module].
* Improvements for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. The rigid model is now skipped, the PDB file closed, and some printouts for better user feedback have been added.
* Changed the default PDB file name for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] to 'simulate.pdb'. The '*.bz2' extension has been dropped so that the file is quicker to create and does not need to be decompressed for loading into molecular viewers.
* Created the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#generate_axis_system specific_analyses.frame_order.geometric.generate_axis_system() function]. This is now used by most parts of the frame order analysis to generate the full 3D eigenframe of the motions. Previously this was implemented each time the frame or major axis was required. This replicated and highly inconsistent code has been eliminated.* Fix for the new [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#generate_axis_system specific_analyses.frame_order.geometric.generate_axis_system() function]. The rotor and free rotor models were not correctly handled and the returned eigenframe was the zero matrix.
* Implemented the pseudo-Brownian frame order dynamics simulation for the single motion models. This uses the same logic as in the test_suite/shared_data/frame_order/cam/*/generate_distribution.py scripts which were used to generate all of the test suite data. However rather than using a random rotation matrix, a random 3D vector is used to rotate a fixed angle. And the rotation is used to rotate the current state to state i+1. The rotation for the state is decomposed into torsion-tilt angles once shifted into the motional eigenframe, the violations checked for as the state shifted to the boundary, then the new state reconstructed from the corrected torsion-tilt angles, and then it is shifted from the motional eigenframe to the PDB frame.
* Shifted the [http://www.nmr-relax.com/api/4.0/lib.frame_order.variables-module.html specific_analyses.frame_order.variables module into the lib.frame_order package]. This is both to minimise circular dependencies, as previously the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order-module.html specific_analyses.frame_order modules ] import from [http://www.nmr-relax.com/api/4.0/target_functions.frame_order-module.html target_functions.frame_order ] and vice-versa, and to allow the relax library functions to have access to these variables.
* Implemented the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] backend for the double rotor frame order model. This involved extending the algorithm to loop over N states, where N=2 for the double rotor and N=1 for all other models. To handle the rotations being about the x and y-axes, an axis permutation algorithm is used to shift these axes to z prior to decomposing to the torsion-tilt angles. The reverse permutation is used to shift the axes back after correcting for being outside of the allowed angles.
* Fixes for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#average_position specific_analyses.frame_order.geometric.average_position() function]. The recent trunk changes with the structural object Internal_selection class required a change in this function.* Updated the [http://www.nmr-relax.com/api/4.0/lib.frame_order.simulation-module.html#brownian lib.frame_order.simulation.brownian() function]. This now uses the internal structural object selection object logic - the [http://www.nmr-relax.com/api/4.0/lib.structure.internal.object.Internal-class.html#selection selection() method ] is called to obtain the [http://www.nmr-relax.com/api/4.0/lib.structure.internal.object.Internal-class.html Internal_selection object], and this is then passed into the rotation() method.
* The quad_int argument for the frame order target function class now defaults to False. This is so that quasi-random Sobol' numerical integration will be used by default.
* The cdp.quad_int flag is now passed into the target function for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#calculate frame order calculate() method]. This is for the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function] backend.
* Fixes for the missing cdp.quad_int flag. If the cdp.quad_int flag is missing, this is now set to False before setting up the target function class. The previous behaviour was that the [http://www.nmr-relax.com/manual/frame_order_quad_int.html frame_order.quad_int user function] must be called prior to optimisation. Now it is optional for turning this flag on and off.
* The RDC only optimisation now defaults to the *_qrint() frame order target functions. This restores the earlier behaviour prior to the restoration of the SciPy quadratic integration.
* Clean up for the frame order target function aliasing. The Scipy quadratic integration and the quasi-random Sobol' integration target functions are now aliased using the getattr() Python method to programmatically choose one or the other. The rigid model has been removed from the list as it is not a numeric model, and the [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#func_double_rotor_qr_int func_double_rotor() target function has been renamed to func_double_rotor_qrint() ] to make it consistent with the naming of the other target functions.* Renaming of all the frame order target functions and PCS integration functions. For consistency, all quasi-random Sobol' integration functions now use the 'qr_int' tag whereas the SciPy quadratic integration functions use the 'quad_int' tag. This is not only in the target function names but also the PCS integration functions in [http://www.nmr-relax.com/api/4.0/lib.frame_order-module.html lib.frame_order].
* Duplicated all Frame_order.test_cam_* system tests for testing the SciPy quadratic integration. The Frame_order.test_cam_* system tests have all been renamed to Frame_order.test_cam_qr_int_*. These have been duplicated and renamed to Frame_order.test_cam_quad_int_*. The flag() system test method has been extended to include the quad_int flag which is then stored in the status object and used in the base CaM frame order system test script to activate the [http://www.nmr-relax.com/manual/frame_order_quad_int.html frame_order.quad_int user function].
* Activated the quad_int flag for a number of the Frame_order.test_cam_quad_int_* system tests. The quad_int argument for the flags() test suite method had been missed for a few of these tests.
* Updated the χ<sup>2</sup> check in the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_cam_qr_int_pseudo_ellipse_free_rotor_rdc Frame_order.test_cam_qr_int_pseudo_ellipse_free_rotor_rdc system test]. This test is not normally run as it blacklisted and duplicates the coverage of other tests. However its chi-squared value check had not been updated for a while and hence the test fails when explicitly run.
* The Sobol' point counting is now turned off for the frame order optimisation functions if none exist. If the cdp.quad_int flag is set, then there will be no Sobol' points to count. This count_sobol_point() user feedback function will therefore not be called by 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.
* Turned off optimisation for all of the Frame_order.test_cam_quad_int_* system tests. The SciPy quadratic integration is far too slow to be used in the test suite. The simple call to the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function] is sufficient for checking these target functions.
* Implemented the SciPy quadratic integration target function for the double rotor frame order model. This simply follows from what all the other quadratic integration target functions and lib.frame_order module functions do.
* Changed the χ<sup>2</sup> value checks in the Frame_order.test_cam_quad_int_double_rotor* system tests. These were the values for the quasi-random Sobol' integration and needed updating for the SciPy quadratic integration.
* Removed the skip_tests argument for the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#__init__ Frame_order system tests __init__() method]. This argument, which was used to manually turn on or off the blacklisted tests, is no longer needed due to the new --no-skip relax command line flag which will enable all blacklisted tests.* The [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html Optimisation_settings object] now supports the quad_int flag. This is for activating the SciPy quadratic integration. It is accepted as an argument for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html#add_grid add_grid() ] and [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html#add_min add_min()] methods, and it returned by the new [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html#get_grid_quad_int get_grid_quad_int() ] and [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html#get_min_quad_int get_min_quad_int() ] methods.
* Added the ability to specify a pre-run directory in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This will be used for refinement purposes. If the new pre_run_dir argument, modelled on the relaxation dispersion auto-analysis, is supplied then results files will be loaded from this directory and the base data pipe copying and PCS subset optimisation steps will be skipped. The model nesting algorithm is also deactivated.
* Activated the SciPy quadratic integration in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. If the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html Optimisation_settings object] has been set up with the quad_int flag, then the auto-analysis will skip the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Frame_order_analysis-class.html#sobol_setup sobol_setup() method ] and instead directly call the [http://www.nmr-relax.com/manual/frame_order_quad_int.html frame_order.quad_int user function]. Optimisation will then use the SciPy quadratic integration rather than the quasi-random Sobol' integration.
* Improvements for the usage of the [http://www.nmr-relax.com/manual/frame_order_quad_int.html frame_order.quad_int user function] in the auto-analysis. The [http://www.nmr-relax.com/manual/frame_order_quad_int.html frame_order.quad_int user function] is now called even when the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Optimisation_settings-class.html Optimisation_settings object] quad_int flag is False. This allows for switching between the SciPy quadratic integration and the quasi-random Sobol' integration, as the SciPy quadratic integration can now be turned off.
* Additions to the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] documentation.
* Incorporated the contents of the summarise.py script into the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis module]. This has been converted into the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise summarise() function ] which will generate a results summary table as the analysis is still running.* Improved logic in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise auto_analyses.frame_order.summarise() function]. The model names, directories and titles are now being auto-generated from the [http://www.nmr-relax.com/api/4.0/lib.frame_order.variables-module.html#MODEL_LIST full list of frame order models in lib.frame_order.variables.MODEL_LIST]. To create a common mechanism for determining the model directory name, the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#model_directory Frame_order_analysis.model_directory() method has been converted into a module function].* The [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] now calls the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise summarise() function ] at the end to create a summary table.
* Shifted the final state saving in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] to be within the safety of the try block.
* Turned off the final state saving in the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_auto_analysis Frame_order.test_auto_analysis system test]. This almost halves the time required for the test. A private class variable _final_state has been added to the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Frame_order_analysis-class.html auto_analyses.frame_order.Frame_order_analysis class ] which when False will cause the state saving step to be skipped.* The [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise summarise() function ] call is now after saving the final state in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This is needed because the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise summarise() function ] will create a new set of data pipes, loading the results which already exist under a different pipe name in the relax data store. Otherwise the final state file is twice as big as it should be.* Incorporated the contents of count_sobol_points.py into the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis module]. The analysis script has been converted into the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() function ] which will generate a summary table of the number of quasi-random Sobol' points used for the PCS numerical integration.* The [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] now calls the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() function ] at the end. This is to automatically create the Sobol' point summary table.* Fixes for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise auto_analyses.frame_order.summerisesummarise() function]. If the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() function ] is called followed by summerisesummarise(), a RelaxError will be raised as the data pipe already exists. The summerisesummarise() function has been modified to switch to the data pipe if it already exists.* Expanded the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] documentation. This adds a description for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise summarise() ] and [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() ] functions.
* Elimination of most of the Frame_order.fixme_test_* system tests and associated data. These tests are from a very early stage of the development of the frame order theory back when the base data was the full and reduced alignment tensors for the each domain calculated from the RDC data. They do not fit into the current analysis where the base data is the RDCs and PCSs for the moving domain. There is no point upgrading the tests as it will be far too much effort and it will only duplicate the coverage of the Frame_order.test_cam_* system tests.
* Renamed the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_opendx_map Frame_order.fixme_test_opendx_map system test to Frame_order.test_opendx_map ] to activate it.* Upgraded the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_opendx_map Frame_order.test_opendx_map system test]. To upgrade from the ancient design to the current design so that the test is functional and relevant, this now uses the same setup as the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_cam_qr_int_rigid Frame_order.test_cam_qr_int_rigid system test]. Instead of performing optimisation, the test calls the [http://www.nmr-relax.com/manual/dx_map.html dx.map user function].* Fix for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#calculate frame order specific API calculate() method]. This was caught by the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_opendx_map Frame_order.test_opendx_map system test]. The scaling matrix was not being specified by the [http://www.nmr-relax.com/manual/dx_map.html dx.map user function] backend and this was causing the method to fail. Instead of passing the non-existent scaling matrix into the target function, the argument is simply ignored. The scaling matrix has no effect on the [http://www.nmr-relax.com/manual/minimise_calculate.html minimise.calculate user function] so it is not necessary.* The verbosity flag is now being respected by the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#calculate frame order specific API calculate() method]. This silences the method when executing the [http://www.nmr-relax.com/manual/dx_map.html dx.map user function]. The χ<sup>2</sup> value printout is suppressed and the verbosity argument is being sent into the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points frame order count_sobol_points() function].
* Added a section printout to the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] when summary tables are created.
* The [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] now defaults to creating a gzipped PDB file. This is to save room, and because most molecular viewers will automatically read gzipped PDB files.
* Fix for the change of the [http://www.nmr-relax.com/api/4.0/pipe_control.pipes-module.html#check_pipe_func pipe_control.pipes.test() function to check_pipe()].
* Small change in the title of the summary table of the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. 'Order parameters' has been replaced by 'Cone half angles' to clarify what the values really are.
* 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_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.
* Improvements to the summary table for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The rotor and free rotor model motional eigenframe parameter axis_alpha is now being converted into spherical angles and reported in the table. This allows the motional eigenframe of all models to be easily compared in the table.
* Created a directory and base PDB system for testing out the PCS information content. The base PDB system consists of Ad Bax's CaM domain structures superimposed onto the open CaM structure, the N-domain CoM shifted to the origin, and the C-domain CoM shifted to the z-axis.
* Modified the PCS content testing base system. The paramagnetic centre is now shifted to the origin, as this is the real centre of the PCS physics.
* Intermediate optimisation results are now stored by the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The results from each [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 function call are now stored in specially named directories located in the 'intermediate_results' directory, which itself is located in the auto-analysis results_dir directory. This allows intermediate results to be more easily analysed later on, which can be useful for optimising the optimisation steps. These directories can also be used for the pre_run_dir auto-analysis argument for subsequent refinements from earlier steps in the optimisation. The results stored include everything from the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Frame_order_analysis-class.html#results_output results_output() method ] and the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#count_sobol_points count_sobol_points() ] and [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html#summarise summarise() ] functions. To allow this to work, the auto-analysis functions count_sobol_points() and summarise() required modification. Results files are now always loaded into a temporary data pipe, rather switching to the corresponding pipe, and the temporary data pipe is deleted after the data has been extracted. The original data pipe name is also stored and a switch back to that pipe occurs at the end of each function.* The simulation is now turned of for intermediate results in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The intermediate results are only for checking, so for these the full pseudo-Brownian dynamics simulations are not required. The simulation flag has been introduced into the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order.Frame_order_analysis-class.html#results_output results_output() method ] of the auto-analysis to control this.
* The splitting of the rigid model grid search into rotation and translation parts is now optional. In the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis], the rigid_grid_split argument has been introduced. The alternating algorithm of performing a grid search over the rotational space followed by translation is now optional and turned off by default. The reason is because the global minimum is sometimes missed with this shortcut algorithm.
* Speedup of the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_auto_analysis Frame_order.test_auto_analysis system test]. The splitting of the rigid model grid search into rotation and translation parts has been reactivated.
* The compression level for results files can now be set in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This is via the new argument results_compress_type, which is used to set the compress_type argument of the [http://www.nmr-relax.com/manual/results_write.html results.write user function]. The results reading parts of the auto-analysis have been updated to allow uncompressed, bzip2 compressed, and gzip compressed files to be handled.
* Added a printout of the frame order model in the target function setup function. This is printed out when 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], or [http://www.nmr-relax.com/manual/minimise_execute.html minimise.execute] user functions are called, and is for better feedback, especially in the auto-analysis where the repetitive optimisations can be confusing.
* Updated the frame order analysis for the structure.load_spins user function changes. The [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html#minimise_setup_atomic_pos minimise_setup_atomic_pos() function ] of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.optimisation-module.html specific_analyses.frame_order.optimisation module] now handles the mixed type spin.pos variable correctly.
* The data pipe containing a PCS subset is now optional in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. This is for systems which have so little data that a subset makes no sense.
* Redesigned the optimisation steps for the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. The code has been significantly simplified as the optimisation for the PCS subset and full data set was the same. The code duplication has been eliminated by combining it into the new optimisation() method. The check for the PCS subset has also been expanded so that it is skipped if the subset data pipe is not supplied, even if an optimisation object for the subset has been (this should prevent strange errors when the auto-analysis is incorrectly used). A side effect of this code merger is that the zooming grid search has now been activated for the full PCS data set. This is of great benefit when a PCS subset is not being used.
* 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 specific_analyses.frame_order.uf.distribute() function has been created as a modified copy of the simulate() function of the same module. This simply performs checks and assembles the data, passing into the new 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.
* Deleted a number of Frame_order.test_distribute* system tests. These are the four double rotor model tests. The [http://www.nmr-relax.com/manual/frame_order_distribute.html frame_order.distribute user function] cannot operate on these test cases as one of the two torsion angles are set to zero in the tests.
* Fix to allow Monte Carlo simulations to be repeated in the frame order analysis. The code for checking for pre-existing Monte Carlo simulation data structures and raising a RelaxError if anything is found has been deleted.
* 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 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 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.