Open main menu

Changes

Relax 4.0.0

51 bytes added, 16:17, 13 October 2015
More symbol formatting, this time for < and >.
* Huge speedup of the CaM frame order test data generation base script. By using multidimensional numpy arrays to store the atomic positions and XH unit vectors of all spins, and performing the rotations on these structures using numpy.tensordot(), the calculations are now a factor of 10 times faster. The progress meter had to be changed to show every 1000 rather than 100 iterations. The rotations of the positions and vectors are now performed sequentially, accidentally fixing a bug with the double motion models (i.e. the 'double rotor' model).
* Modified the CaM frame order test data generation base script to conserve computer RAM. The XH vector and atomic position data structures for all N rotations are now of the numpy.float32 rather than numpy.float64 type. The main change is to calculate the averaged RDCs and averaged PCSs separately, deleting the N-sized data structures once the data files are written.
* Complete redesign of the CaM frame order data generation base script for speed and memory savings. Although the rotated XH bond vector and atomic position code was very fast, the amount of memory needed to store these in the spin containers and interatomic data containers was huge when N > &gt; 1e<sup>6</sup>. The subsequent [http://www.nmr-relax.com/manual/rdc_back_calc.html rdc.back_calc] and [http://www.nmr-relax.com/manual/pcs_back_calc.html pcs.back_calc] user function calls would also take far too long. Therefore the base script has been redesigned. The _create_distribution() method has been split into four: _calculate_pcs(), _calculate_rdc(), _create_distribution(), and _pipe_setup(). The _pipe_setup() method is called first to set up the data pipe with all required data. Then the _calculate_rdc() and _calculate_pcs() methods, and finally _create_distribution() if the DIST_PDB flag is set. The calls to the [http://www.nmr-relax.com/manual/rdc_back_calc.html rdc.back_calc] and [http://www.nmr-relax.com/manual/pcs_back_calc.html pcs.back_calc] user functions have been eliminated. Instead the _calculate_rdc() and _calculate_pcs() methods calculate the averaged RDC and PCS themselves as numpy array structures. Rather than storing the huge rotated vectors and atomic positions data structures, the RDCs and PCSs are summed. These are then divided by self.N at the end to average the values. Compared to the old code, when N is set to 20 million the RAM usage drops from ~20 GB to ~65 MB. The total run time is also decreased on one system from a few days to a few hours (an order or two of magnitude).
* Changed the progress meter updating for the CaM frame order test data generation base script. The spinner was far too fast, updating every 5 increments, and is now updated every 250. And the total number is now only printed every 10,000 increments.
* Improvements to the progress meter for the CaM frame order test data generation base script. Commas are now printed between the thousands and the numbers are now right justified.
* Changed the average domain position parameter values in the CaM frame order system tests. This is in the base script used by all scripts in test_suite/system_tests/scripts/frame_order/cam/. The translation vector coordinates are now set, as well as the CoM Euler angle rotations. These come from the log file of the test_suite/shared_data/frame_order/cam/superimpose.py script, and are needed due to the simplification of the average domain position mechanics now mimicking the Kabsch superimposition algorithm.
* The [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#mesg_opt_debug CaM frame order system test mesg_opt_debug() method] now prints out the translation vector. This is printed out at the end of all CaM frame order system tests to help with debugging when the test fails.
* Change for how the CaM frame order system test scripts handle the average domain position rotation. The trick of pre-rotating the 3D coordinates was used to solve the {&alpha;, &beta;, &gamma;} -> &gt; {0, &beta;', &gamma;'} angle conversion problem in the rotor models no longer works now that the average domain position mechanics has been simplified. Instead, high precision optimised &beta;' and &gamma;' values are now set, and the ave_pos_alpha value set to None. The high precision parameters were obtained with the frame_order.py script located in the directory test_suite/shared_data/frame_order/cam/free_rotor. The free rotor target function was modified so that the translation vector is hard-coded to [-20.859750185691549, -2.450606987447843, -2.191854570352916] and the axis &theta; and &phi; angles to 0.96007997859534299767 and 4.0322755062196229403. These parameters were then commented out for the model in the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html module specific_analyses.frame_order.parameters] so only &beta;' and &gamma;' were optimised. Iterative optimisation was used with increasing precision, ending up with high precision using 10,000 Sobol' points.
* Updated a number of the CaM frame order system tests for the higher precision data. The new data results in chi-squared values at the real solution to be much closer to zero.
* Change for how the CaM frame order free-rotor pseudo-ellipse test script handle the average position.
* Fix for the frame order visualisation script created by the auto-analysis. The call to [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order] is now correct for the current version of this user function.
* Removed a terrible hack for handling the frame order analysis without constraints. This is no longer needed as the log-barrier method is now used to constrain the optimisation, so that the torsion angle can no longer be negative.
* Constraints are now implemented in the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#grid_search frame order grid search]. This is useful for the pseudo-elliptic models as the cone &theta;<sub>x</sub> < &lt; &theta;<sub>y</sub> constraint halves the optimisation space.
* Expanded the CaM rotor test data frame_order.py optimisation script. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower. The results of the new optimisation are included.
* Expanded the CaM pseudo-ellipse test data frame_order.py optimisation script. The optimisation is now implemented as in the auto-analysis, with an iterative increase in accuracy of the quasi-random numerical integration together with an decrease of the function tolerance cutoff for optimisation. The accuracy of the initial chi-squared calculation is now much higher. And the accuracy of the initial grid search and the Monte Carlo simulations is now much lower. The results of the new optimisation are included.
* Updated the frame order optimisation results for the CaM 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.
* Updated the frame order optimisation results for the 2<sup>nd</sup> CaM 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.
* Fixes for the CaM free-rotor pseudo-ellipse frame order model test data set. This is for the constraint 0 &le; &theta;<sub>x</sub> &le; &theta;<sub>y</sub> &le; &pi;, as the old data was created with &theta;<sub>x</sub> > &gt; &theta;<sub>y</sub>. The new data is also of high quality using 20 million structures and numpy.float128 data averaging.
* Created the [http://www.nmr-relax.com/api/4.0/lib.frame_order.conversions-module.html#convert_axis_alpha_to_spherical lib.frame_order.rotor_axis.convert_axis_alpha_to_spherical() function]. This will convert the axis &alpha; angle to the equivalent spherical angles &theta; and &phi;.
* Renamed the [http://www.nmr-relax.com/api/4.0/lib.frame_order.conversions-module.html lib.frame_order.rotor_axis module to lib.frame_order.conversions]. This module will be used for all sorts of frame order parameter conversions.
* Added extensive printouts to the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function].
* Redesigned the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function] frontend. Previously only cyclic permutations were considered, however non-cyclic permutations are also allowed when accompanied by an axis inversion. Therefore 3 combinations exist with cone_theta_x &le; cone_theta_y, or 2 when the current combination is excluded.
* Created 6 system tests for the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function]. This covers the 3 starting conditions (x<&lt;y<&lt;z, x<&lt;z<&lt;y, z<&lt;x<&lt;y) and the two permutations ('A' and 'B') for each of these which do not include the starting permutation. They replace the original Frame_order.test_axis_permutation system test with the tests Frame_order.test_axis_perm_x_le_y_le_z_permA, Frame_order.test_axis_perm_x_le_y_le_z_permB, Frame_order.test_axis_perm_x_le_z_le_y_permA, Frame_order.test_axis_perm_x_le_z_le_y_permB, Frame_order.test_axis_perm_z_le_x_le_y_permA, and Frame_order.test_axis_perm_z_le_x_le_y_permB.* Implemented the new frame_order.permute_axes backend. The 3 starting conditions x<&lt;y<&lt;z, x<&lt;z<&lt;y, and z<&lt;x<&lt;y and the two permutations 'A' and 'B' (for each of these which do not include the starting permutation) are now supported. For these 6 combinations, the axis and order parameter permutation and the z-axis inversion are selected and applied to the current system.
* Removed the second permutation from the 6 Frame_order.test_axis_perm_* system tests. A second identical permutation does not necessarily restore the original state.
* Fix for the frame_order.permute_axes for the torsionless pseudo-ellipse model. The data structure cdp.cone_sigma_max does not exist in this model as cone_sigma_max == 0.0.
* The geometric representation part of the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] now checks parameters. This calls the specific_analyses.frame_order.checks.check_parameters Check object to make sure that all necessary parameters for the model exist.
* Completed the Frame_order.test_pdb_model_rotor system test. This now sets the rotor axis to the z-axis (with a printout to be sure), sets the torsion angle to zero for simplicity, creates a new data pipe and loads the PDB representation file, then checks all of the key atom coordinates.
* Fixes for the unit tests of the lib.frame_order_matrix_ops module for the free rotor isotropic cone. The S1 order parameter has been eliminated due to angles > &gt; &pi;/2.0 causing the frame order matrix to be incorrectly predicted. Therefore all unit tests have been converted to use the cone opening angle &theta; instead. In addition, the test_compile_2nd_matrix_iso_cone_free_rotor_disorder had been modified to pass with the incorrect frame order matrix by comparing to the half cone frame order matrix rather than the identity frame order matrix.
* Fix for inverted axes in the new Frame_order.test_pdb_model_rotor system test.
* Huge bug fix for the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] - the single axis direction was incorrect. In the PDB representation of the frame order motion for the rotor and isotropic cone models (rotor, free rotor, isotropic cone, free rotor isotropic cone, and torsionless isotropic cone), the X and Z axes were swapped. This is because the eigenframe of the motion was being incorrectly constructed via the lib.geometry.rotations.two_vect_to_R() function. For better control, the specific_analyses.frame_order.geometric.frame_from_axis() function has been created. This constructs a full motional eigenframe from the Z-axis. The problem was detected via the new Frame_order.test_pdb_model_rotor system test.
Trusted, Bureaucrats
4,228

edits