* 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.
* Large increase in accuracy of the RDC and PCS averaging. This is for the CaM frame order test data generation base script. By summing the RDCs and PCSs into 1D numpy.float128 arrays (for this, a 64-bit system is required), and then dividing by N at the end, the average value can be calculated with a much higher accuracy. As N becomes larger, the numerical averaging introduces greater and greater amounts of truncation artifacts. So this change alleviates this.
* Fix for the RDC and PCS averaging in the CaM frame order test data generation base script. For the double rotor model, or any multiple motional mode model, the averaging was incorrect. Instead of dividing by N, the values should be divided by N**<sup>M</sup>, where M is the number of motional modes.* Huge increase in precision for the CaM frame order free rotor model test data. The higher precision is because the number structures in the distribution is now twenty million rather than one million, and the much higher precision numpy.float128 averaging of the updated data generation base script has been used. This data should allow for a much better estimate of the &beta ; and &gamma ; average domain position parameter values for the free rotor models which are affected by the collapse of the &alpha ; parameter to zero.* Huge increase in precision for the CaM frame order double rotor model test data. The higher precision is because the number structures in the distribution is now over twenty million (4500**<sup>2</sup>) rather than a quarter of a million (500**<sup>2</sup>). And the much higher precision numpy.float128 averaging of the updated data generation base script has been used.
* Fix for the constraint deactivation in the frame order minimisation when no constraints are present.
* Huge increase in precision for the CaM frame order rotor model test data. The higher precision is because the number structures in the distribution is now 20 million rather than 166,666, and the numpy.float128 data averaging has been used.
* Large increase in precision for the 2nd 2<sup>nd</sup> CaM frame order rotor model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1,000,001 and the numpy.float128 data averaging has been used.* Parameter update for the 2nd 2<sup>nd</sup> rotor 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.* Large increase in precision for the 2nd 2<sup>nd</sup> CaM frame order free rotor model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 999,999 and the numpy.float128 data averaging has been used.
* Updated the CaM frame order test model superimposition script. The Ca2+ atoms are now deleted from the structures before superimposition so that the centroid matches that used in the frame order analysis.
* The average domain rotation centroid is printed out when setting up the frame order target functions. This is to help the user understand what is happening in the analysis.
* 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 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 {aα, bβ, gγ} -> {0, bβ', gγ'} angle conversion problem in the rotor models no longer works now that the average domain position mechanics has been simplified. Instead, high precision optimised b' and g' 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 module specific_analyses.frame_order.parameters so only b' and g' 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.
* Added FIXME comments to the 2nd 2<sup>nd</sup> free-rotor CaM frame order model system test scripts. These explain the steps required to obtain the correct b' and g' average domain position rotation angles.
* Large increase in precision for the CaM frame order isotropic cone model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
* Large increase in precision for the CaM frame order free-rotor, isotropic cone model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
* Updated the CaM frame order free-rotor model test data set for testing for missing data. This is the data in test_suite/shared_data/frame_order/cam/free_rotor_missing_data. To simplify the copying of data from test_suite/shared_data/frame_order/cam/free_rotor and then the deletion of data, the missing.py script was created to automate the process. The generate_distribution.py script and some of the files it creates were removed from the repository so it is clearer how the data has been created.
* Large increase in precision for the 2nd 2<sup>nd</sup> CaM frame order free-rotor, isotropic cone model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
* Large increase in precision for the CaM frame order free-rotor, pseudo-ellipse model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
* Large increase in precision for the CaM frame order pseudo-ellipse model test data set. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used.
* Elimination of the error_flag variable from the frame order analysis. This flag is used to activate some old code paths which have now been deleted as they are never used.
* Optimisation of the average domain position for the CaM frame order free-rotor models. The log file that shows the optimisation of the average domain position for the free-rotor models has been added to the repository for reference. This is for the simple free-rotor model, but the optimised position holds for the isotropic cone and pseudo-ellipse model data too. To perform the optimisation, the axis_theta and axis_phi parameters were removed from the model and hardcoded into the target function. As the rotor axis is know, this allows the average domain position to be optimised in isolation. Visual inspection of the results confirmed the position to be correct.
* Fixes for the 2nd 2<sup>nd</sup> frame order free-rotor system tests. The average domain position parameters are now set to the correct values, matching those in the relax log file frame_order_ave_pos_opt.log in test_suite/shared_data/frame_order/cam/free_rotor2.* Updated the 2nd 2<sup>nd</sup> CaM free-rotor frame order system tests for the correct average domain position. The chi-squared values are now significantly lower.
* Increased the precision of the chi-squared value testing in the CaM frame order system tests. The check_chi2 method has been modified so that the chi-squared value is no longer scaled, and the precision has been increased from 1 significant figure to 4. All of the tests have been updated to match.
* The minimisation verbosity flag now effects the frame order RelaxWarning about turning constraints off.
* Preformed a frame order analysis on the 2nd 2<sup>nd</sup> CaM free-rotor model test data. This is to check that everything is operating as expected.
* Small speedup for the frame order target functions for most models. The rotation matrix corresponding to each Sobol' point for the numerical integration is now pre-calculated during target function initialisation rather than once for each function call.
* Updates for some of the frame order system tests for the rotation matrix pre-calculation change. As the rotation matrix is being pre-calculated, one consequence is that the Sobol' angles are now full 64-bit precision rather than 32-bit. Therefore this changes the chi-squared value a little, requiring updates to the tests.
* Preformed a frame order analysis on the CaM free-rotor mode test data set. This is to demonstrate that everything is operating correctly.
* Preformed a frame order analysis on the CaM free-rotor mode test data set with missing data. This is to demonstrate that everything is operating correctly.
* Attempt to speed up the pseudo-elliptic frame order models. The quasi-random numerical integration of the PCS for the pseudo-ellipse has been modified so that the torsion angle check for each Sobol' point is preformed before the tmax_pseudo_ellipse() function call. A new check that the tilt angle is less than cone_theta_y, the larger of the two cone angles, has also been added to avoid tmax_pseudo_ellipse() when the &theta ; tilt angle is outside of an isotropic cone defined by cone_theta_y.
* Preformed a frame order analysis on a number of the CaM test data sets. This includes the rotor, isotropic cone, and pseudo-ellipse, and the analyses demonstrate a common bug between all these models.
* Preformed a frame order analysis on the rigid CaM test data set. This is to demonstrate that everything is operating correctly.
* Updated the frame order representations in all of the frame_order.py scripts for the CaM test data. All PDB files are now gzipped to save space, the old pymol.cone_pdb user function calls replaced with [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order], and an average domain PDB file for the exact solution is now created in all cases.
* The minimisation constraints are now turned on for all CaM test data frame_order.py optimisation scripts.
* Updated the rotor CaM test data frame_order.py script for the parameter reduction. The rotor axis {θ, φ} polar angles have been replaced by the single axis &alpha ; angle. This now matches the script for the 2nd 2<sup>nd</sup> rotor model.
* Updated the parameters in all of the frame_order.py scripts for the CaM test data. The parameters are now specified at the top of the script as variables. All scripts now handle the change to the translation + CoM rotation for the average domain position rather than having a pure rotation about a fixed pivot, which is no longer supported.
* The [http://www.nmr-relax.com/manual/frame_order_sobol_setup.html frame_order.num_int_pts user function] now throws a RelaxWarning if not enough points are used.
* Changed the creation of Sobol' points for numerical integration in the frame order target functions. The points are now all created at once using the i4_sobol_generate() rather than i4_sobol() function from the extern.sobol.sobol_lib module.
* Increased the number of integration points from 50 or 100 to 5000. This is for all CaM frame_order.py test data optimisation scripts. The higher number of points are essential for optimising the frame order models and hence for checking the relax implementation.
* Updated the frame_order.py optimisation script for the small angle CaM rotor frame order test data. This now has the correct rotor torsion angle of 1 degree, and the spherical coordinates are now converted to the axis &alpha ; parameter.
* Expanded the capabilities of the [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order user function]. The isotropic and pseudo-elliptic cones are now represented as they used to be under the [http://www.nmr-relax.com/manual/pymol_cone_pdb.html pymol.cone_pdb user function]. To avoid code duplication, the new represent_cone_axis(), represent_cone_object() and represent_rotor_object() functions have been created to send the commands into PyMOL.
* Increased the precision of all of the CaM frame order system tests by 40 times. The number of Sobol' integration points have been significantly increased while only increasing the frame order system test timings by ~10%. This allows for checking for chi-squared values at the minima much closer to zero, and is much better for demonstrating bugs.
* 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 frame order grid search. This is useful for the pseudo-elliptic models as the cone theta_x θ< theta_y sub>x</sub> < θ<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 CaM frame order data generation base script to print out more information. This is for the first axis system so that the same amount of information as the second system is printed.
* Expanded the CaM isotropic cone test data frame_order.py optimisation script and added the results. 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.
* Important fix for the 2nd 2<sup>nd</sup> rotor model of the CaM frame order test data. The tilt angle was not set, and therefore the old data matched the non-tilted 1st 1<sup>st</sup> rotor model. All PCS and RDC data has been regenerated to the highest quality using 20,000,000 structures.
* Updated the 3 Frame_order.test_cam_rotor2* system tests for the higher quality data.
* Expanded the 2nd 2<sup>nd</sup> 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 have been added to the repository.
* Expanded the CaM free-rotor isotropic cone 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 have been added to the repository.
* Expanded all remaining CaM test data frame_order.py optimisation scripts. 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.
* Updated the CaM 2-site to rotor model frame_order.py optimisation script for the parameter reduction. The rotor frame order model axis spherical angles have now been converted to a single &alpha ; angle.
* Fix for a number of the frame order models which do not have parameter constraints. This change to the grid_search() API method is similar to the previous fix for the minimise() method. The linear_constraint() function was returning A, b = [], [] for these models, but these empty numpy arrays were causing the dot product with A to fail in the grid_search() API method. These values are now caught and the constraint algorithm turned off.
* Converted the 'free rotor' frame order model to the new axis_alpha parameter system. The axis_theta and axis_phi spherical coordinates are converted to the new reduced parameter set defined by a random point in space (the CoM of all atoms), the pivot point, and a single angle α. The &alpha ; parameter defines the rotor axis angle from the xy-plane.* Parameter conversion for all of the CaM free rotor test data frame_order.py optimisation scripts. The rotor axis spherical angles have been replaced by the axis &alpha ; angle defining the rotor with respect to the xy-plane.* Modified the CaM frame order base system test script to catch a bug in the free rotor model. The axis spherical angles are no longer set for the rotor or free rotor models, as they use the &alpha ; angle instead and the lack of the &theta ; and &phi ; parameters triggers the bug. The PDB representation of the frame order motions is also now tested for all frame order models, as it was turned off for the rigid, rotor and free rotor models and this is where the bug lies.* Fix for the failure of the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] for the free rotor frame order model. This is due to the recent parameter conversion to the axis &alpha ; angle.* Eliminated the average position &alpha ; Euler angle parameter from the free-rotor pseudo-ellipse model. As this frame order model is a free-rotor, the average domain position is therefore undefined and it can freely rotate about the rotor axis. One of the Euler angles for rotating to the average position can therefore be removed, just as in the free rotor and free rotor isotropic cone models.* Eliminated the free rotor psuedo-ellipse model ave_pos_alpha parameter from the target function. The average domain position &alpha ; Euler angle has already been removed from the specific analyses code and this change brings the target function into line with these changes.* Added the full optimisation results for the 2nd 2<sup>nd</sup> rotor frame order model for the CaM test data. This is from the new frame_order.py optimisation script and the results demonstrate the stability of the rotor model.
* Added the full optimisation results for the small angle rotor CaM frame order test data. This is from the new frame_order.py optimisation script and the results demonstrate the stability of the rotor model, even when the rotor is as small as 1 degree.
* Fix for the free rotor PDB representation created by the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. The simulation axes were being incorrectly generated from the &theta ; and &phi ; angles, which no longer exist as they have been replaced by the &alpha ; angle.
* Added the full optimisation results for the free rotor pseudo-ellipse frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
* Added the full optimisation results for the rotor frame order model. This is for the 2-site CaM test data using the new frame_order.py optimisation script.
* Modified the [http://www.nmr-relax.com/manual/pymol_cone_pdb.html pymol.cone_pdb] and [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order] user functions to use PyMOL IDs. The PyMOL IDs are used to select individual objects in PyMOL rather than all objects so that the subsequent PyMOL commands will only be applied to that object. This allows for multiple objects to be handled simultaneously.
* Added the full optimisation results for the free rotor frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
* Added the full optimisation results for the 2nd 2<sup>nd</sup> free rotor frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
* Added the full optimisation results for the free rotor frame order model with missing data. This is for the CaM test data using the new frame_order.py optimisation script.
* Added a script for recreating the frame order PDB representation and displaying it in PyMOL. This is for the optimised results.
* Fixes for the rotor object created by the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. The rotor is now also shown for the free rotor pseudo-ellipse, despite it being a useless model, and the propeller blades are no longer staggered for all the free rotor models so that two circles are no longer produced.
* Updated the free rotor and 2nd 2<sup>nd</sup> free rotor PDB representations using the represent_frame_order.py script. This is for the CaM frame order test data.
* Reparameterisation of the double rotor frame order model. The two axes defined by spherical angles have been replaced by a full eigenframe and the second pivot has been replaced by a single displacement along the z-axis of the eigenframe.
* Removed the 2nd 2<sup>nd</sup> pivot point infrastructure from the frame order analysis. The 2nd 2<sup>nd</sup> pivot is now defined via the pivot_disp parameter.* Added the 2nd 2<sup>nd</sup> rotor axis torsion angle to the list of frame order parameters. This is for the double rotor model.
* Comment fixes for the eigenframe reconstruction in the frame order target functions.
* Converted the double rotor frame order model target function to use the new parameterisation.
* Simplification and clean up of the RDC and PCS flags in the frame order target functions. The per-alignment flags have been removed and replaced by a global flag for all data. This accidentally fixes a bug when only RDCs are present, as the calc_vectors() method was being called when it should not have been.
* Speedup and simplifications for the vector calculations used for the PCS numerical integration. This has a minimal effect on the total speed as the target function calc_vectors() method is not the major bottleneck - the slowest part is the quasi-random numerical integration. However the changes may be useful for speeding up the integration later on. The 3D pivot point, average domain rotation pivot, and paramagnetic centre position arrays are now converted into rank-2 arrays in __init__() where the first dimension corresponds to the spin. Each element is a copy of the 3D array. These are then used for the calculation of the pivot to atom vectors, eliminating the looping over spins. The numpy add() and subtract() ufuncs are used together with the out argument for speed and to avoid temporary data structure creation and deletion. The end result is that the calculated vector structure is transposed, so the first dimension are the spins. The changes required minor updates to a number of system tests. The target functions themselves had to be modified so that the pivot is converted to the larger structure when optimised, or aliased.
* Added a script for timing different ways to calculate PCSs and RDCs for multiple vectors. This uses the timeit module rather than profile to demonstrate the speed of 7 different ways to calculate the RDCs or PCSs for an array of vectors using numpy. In the frame order analysis, this is the bottleneck for the quasi-random numerical integration of the PCS. The log file shows a potential 1 order of magnitude speedup between the 1st 1<sup>st</sup> technique, which is currently used in the frame order analysis, and the 7th 7<sup>th</sup> and last technique. The first technique loops over each vector, calculating the PCS. The last expands the PCS/RDC equation of the projection of the vector into the alignment tensor, and calculates all PCSs simultaneously.
* Added another timing script for RDC and PCS calculation timings. This time, the calculation for multiple alignments is now being timed. An addition set of methods for calculating the values via tensor projections have been added. For 5 alignments and 200 vectors, this demonstrates a potential 20x speedup for this part of the RDC/PCS calculation. Most of this speedup should be obtainable for the numerical PCS integration in the frame order models.
* Small speedup for all of the frame order models. The PCS averaging in the quasi-random numerical integration functions now uses the multiply() and divide() numpy methods to eliminate a loop over the alignments. For this, a new dimension over the spins was added to the PCS constant calculated in the target function __init__() method. In one test of the pseudo-ellipse, the time dropped from 191 seconds to 172.
* Added the full optimisation results for the torsionless isotropic cone frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
* Small speedups for all of the frame order models in the quasi-random numerical PCS integration. These changes result in an ~10% speedup. Testing via the func_pseudo_ellipse() target function using the relax profiling flag, the time for one optimisation decreased from 158 to 146 seconds. The changes consist of pre-calculating all rotations of the rotation matrix into the motional eigenframe in one mathematical operation rather than one operation per Sobol' point rotation, unpacking the Sobol' points into the respective angles prior to looping over the points, and taking the absolute value of the torsion angle and testing if it is out of the bounds rather than checking both the negative and positive values.
* Attempt at speeding up the torsionless pseudo-ellipse frame order model. The check if the Sobol' point is outside of an isotropic cone defined by the largest angle theta_y θ<sub>y</sub> is now performed to avoid many unnecessary calls to the tmax_pseudo_ellipse() function. This however reveals a problem with the test suite data for this model.
* Updated all of the CaM frame order system tests for the recent speedup. The speedup switched to the use of numpy.tensordot() for shifting each Sobol' rotation into the eigenframe rather than the previous numpy.dot(). Strangely this affects the precision and hence the chi-squared value calculated for each system test - both increasing and decreasing it randomly.
* The frame order target function calc_vectors() method arguments have all been converted to keywords. This is in preparation for handling a second pivot argument for the double rotor model.
* Fixes for all PCS numeric integration for all frame order models in the rigid case. The exact PCS values for the rigid state are now correctly calculated when no Sobol' points lie within the motional model. The identity matrix is used to set the rotation to zero, and the PCS values are now multiplied by the constant.
* Updates for the chi-squared value in all the Frame_order.test_rigid_data_to_*_model system tests. This is now much reduced as the true rigid state is now being tested for.
* The rigid frame order matrix for the pseudo-ellipse models is now correctly handled. This allows the rigid case RDCs to be correctly calculated for both the pseudo-ellipse and torsionless pseudo-ellipse models. The previous catch of the theta_x θ<sub>x</sub> cone angle of zero was incorrectly recreating the frame order matrix, which really should be the identity matrix. However truncation artifacts due to the quadratic SciPy integration still cause the model to be ill-conditioned near the rigid case. The rigid case is correctly handled, but a tiny shift of the parameters off zero cause a discontinuity.
* Updates for the Frame_order.test_rigid_data_to_pseudo_ellipse*_model system tests. The chi-squared value now matches the rigid model.
* Large increase in precision for the CaM frame order torsionless pseudo-ellipse model test data set. In addition, the theta_x θ<sub>x</sub> and theta_y θ<sub>y</sub> angles have also been swapped so that the new constraint of 0 ≤ θ<= theta_x sub>x<= theta_y /sub> ≤ θ<= sub>y</sub> ≤ &pi ; built into the analysis is satisfied. The higher precision is because the number structures in the distribution is now 20 million rather than 1 million and the numpy.float128 data averaging has been used. The algorithm for finding suitable random domain positions within the motional limits has been changed as well by extracting the &theta ; and &phi ; tilt angles from the random rotation, dropping the torsion angle σ, and reconstructing the rotation from just the tilt angles. This increases the speed of the data generation script by minimally 5 orders of magnitude.* Changed the parameter values for the Frame_order.test_cam_pseudo_ellipse_torsionless* system tests. The theta_x θ<sub>x</sub> and theta_y θ<sub>y</sub> angles are now swapped. The chi-squared values are now also lower in the 3 system tests as the data is now of much higher precision.
* Speedup for the frame order analyses when only one domain is aligned. When only one domain is aligned, the reverse Ln3+ to spin vectors for the PCS are no longer calculated. For most analyses, this should significantly reduce the number of mathematical operations required for the quasi-random Sobol' point numerical integration.
* Support for the 3 vector system for double motions has been added to the frame order analysis. This is used for the quasi-random Sobol' numeric integration of the PCS. The lanthanide to atom vector is the sum of three parts: the 1st 1<sup>st</sup> pivot to atom vector rotated by the 1st 1<sup>st</sup> mode of motion; the 2nd 2<sup>nd</sup> pivot to 1st 1<sup>st</sup> pivot vector rotated by the 2nd 2<sup>nd</sup> mode of motion (together with the rotated 1st 1<sup>st</sup> pivot to atom vectors); and the lanthanide to second pivot vector. All these vectors are passed into the lib.frame_order.double_rotor.pcs_numeric_int_double_rotor() function, which passes them to the pcs_pivot_motion_double_rotor() function where they are rotated and reconstructed into the Ln3+ to atom vectors.* Fully implemented the double rotor frame order model for PCS data. Sobol' quasi-random points for the numerical integration are now generated separately for both torsion angles, and two separate sets of rotation matrices for both angles for each Sobol' point are now pre-calculated in the create_sobol_data() target function method. The calc_vectors() target function method has also been modified as the lanthanide to pivot vector is to the second pivot in the double rotor model rather than the first. The target function itself has been fixed as the two pivots were mixed up - the 2nd 2<sup>nd</sup> pivot is optimised and the inter-pivot distance along the z-axis gives the position of the 1st 1<sup>st</sup> pivot. For the lib.frame_order.double_rotor module, the second set of Sobol' point rotation matrices corresponding to sigma2, the rotation about the second pivot, is now passed into the pcs_numeric_int_double_rotor() function. These rotations are frame shifted into the eigenframe of the motion, and then correctly passed into pcs_pivot_motion_double_rotor(). The elimination of Sobol' points outside of the distribution has been fixed in the base pcs_numeric_int_double_rotor() function and now both torsion angles are being checked.
* Fix for the unpacking of the double rotor frame order parameters in the target function. This is for when the pivot point is being optimised.
* Created a new synthetic CaM data set for the double rotor frame order model. This is the same as the test_suite/shared_data/frame_order/cam/double_rotor data except that the angles have been increased from 11.5 and 10.5 degrees to 85.0 and 55.0 for the two torsion angles. This is to help in debugging the double rotor model as the original test data is too close to the rigid state to notice certain issues.
* Created 3 frame order system tests for the new large angle double rotor CaM synthetic data. These are the Frame_order.test_cam_double_rotor_large_angle, Frame_order.test_cam_double_rotor_large_angle_rdc, and Frame_order.test_cam_double_rotor_large_angle_pcs system tests.
* Added the full optimisation results for the torsionless pseudo-ellipse frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
* Added the full optimisation results for the 2nd 2<sup>nd</sup> free rotor isotropic cone frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
* Small fix for the large angle CaM double rotor frame order model synthetic test data. The way the rotation angle was calculated was slightly out due to integer truncation. The integers are now converted to floats in the generate_distribution.py script and all of the PCS and RDC data averaged over ~20 million states has been recalculated.
* Added proper support for the double rotor frame order models to the system test scripts. This is for the CaM synthetic data. The base script can now handle the current parameterisation of the double rotor model with a single pivot, an eigenframe, and the second pivot defined by a displacement along the z-axis. The scripts for the double_rotor and double_rotor_large_angle data sets have been changed to use this parameterisation as well.
* Attempt at implementing the 2nd 2<sup>nd</sup> degree frame order matrix for the double rotor model. This is required for the RDC.
* The second torsion angle is now printed out for the frame order system tests. This is in the system test class mesg_opt_debug() method and allows for better debugging of the double rotor models.
* Fix for the Frame_order.test_cam_double_rotor_large_angle* system tests. The system test script was pointing to the wrong data directory.
* Shifted the frame order geometric representation functions into their own module. This is the new specific_analyses.frame_order.geometric module.
* The frame order geometric representation functions are no longer PDB specific. Instead the format argument is accepted. This will allow different formats to be supported in the future. Because of this change, all specific_analyses.frame_order.geometric.pdb_*() functions has been renamed to create_*().
* Created an auxiliary function for automatically generating the pivots of the frame order analysis. This is the new specific_analyses.frame_order.data.generate_pivot() function. It will generate the 1st 1<sup>st</sup> or 2nd 2<sup>nd</sup> pivot, hence supporting both the single motion models and the double motion double rotor model.
* Shifted the rotor generation for the frame order geometric representation into its own function. This is the specific_analyses.frame_order.geometric.add_rotors() function which adds the rotors are new structures to a given internal structural object. The code has been extended to add support for the double rotor model.
* Fix for the pivots created by the specific_analyses.frame_order.data.generate_pivot() function. This is for the double rotor model where the 1st 1<sup>st</sup> mode of motion is about the 2nd 2<sup>nd</sup> pivot, and the 2nd 2<sup>nd</sup> mode of motion about the 1st 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 MoleculeContainer object is empty.
* Refactored the frame order geometric motional representation code. The code of the specific_analyses.frame_order.geometric.create_geometric_rep() function has been spun out into 3 new functions: add_rotors(), add_axes(), and 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 lib.structure.represent.rotor.rotor_pdb() function creates its own. As part of the rafactorisation, the neg_cone flag has been eliminated.
* Fixes for the double rotor frame order system tests for the CaM synthetic data. The torsion angles needed to be swapped and the pivot point changed from the C terminal domain CoM to the N domain CoM.
* More fixes for the double rotor frame order system tests for the CaM synthetic data. The eigensystem was inverted.
* Updated the chi2 χ<sup>2</sup> check for the large angle double rotor frame order system tests. This is needed for the eigenframe fix.
* Updates for the frame order system tests for the float32 to float64 change. Some chi-squared values have slightly changed.
* The CaM frame order test data optimisation scripts now save more state files. The state of the true dynamics and the fixed pivot optimisation results are now stored as well. This might be useful for extracting these results without redoing the calculations.
* Added model support for the rotor geometric object. This is the structural object used in the frame order analysis to create PDB representations of rotor motions. The number of atoms created for the rotor is now constant, allowing for models whereby the atom number and connectivity must be preserved between all models.
* Changed the grid search pivot displacement frame order parameter. Instead of searching from 0 to 50 Angstroms, the search is now from 10 to 50. This is to avoid the edge case of pivot_disp = 0.0 from which the optimisation cannot escape.
* Speedup of the PCS component of the rigid frame order model. The lanthanide to atom vectors are now being calculated outside of the alignment tensor and spin loops, as well as the inverse vector lengths to the 5th 5<sup>th</sup> power. This increases the speed by a factor of 1.216 (from 38.133 to 31.368 seconds for 23329 calls of the func_rigid() target function).
* Added the full optimisation results for the rigid frame order model. This is for the CaM test data using the new frame_order.py optimisation script.
* Numpy <= ≤ 1.6 fixes for the frame order PCS code. The numpy.linalg.norm function does not have an axis argument in numpy 1.6, therefore the lib.compat.norm() function is now used instead. This function was created exactly for this axis argument problem.
* Created the new specific_analyses.frame_order.variables module. This currently contains variables for all of the frame order model names, as well as various lists of these models. The rest of the frame order specific analysis code as well as the frame order user functions have been converted to use these model variables exclusively rather than having the model name strings hardcoded throughout the codebase.
* Added the full optimisation results for the double rotor test data. This is for the CaM frame order test data using the new frame_order.py optimisation script.
* 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_max θ_max 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 pcs_pivot_motion_full_qrint() function decreases from 20.849 to 20.719 seconds.* Converted the torsionless pseudo-ellipse model to also use the tmax_pseudo_ellipse_array() function. This allows the calculation of the pseudo-elliptic cone opening theta_max θ_max 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.
* 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 target_fn_data_setup(). This is now called before the Frame_order_grid_command and 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 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 frame order auto-analysis.
* Updated the frame order optimisation results for the 2nd 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.
* Updated the frame order optimisation results for the 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.
* Updated the frame order optimisation results for the CaM missing data 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.
* Updated the frame order optimisation results for the CaM free rotor isotropic cone 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 CaM small angle 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 2nd 2<sup>nd</sup> CaM free rotor isotropic cone 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 CaM pseudo-ellipse 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 CaM torsionless isotropic cone 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 2nd 2<sup>nd</sup> CaM pseudo-elliptic cone 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.
* Some more fixes for the optimisation user function changes.
* Removed the parameter scaling for the pivot point frame order parameters. These were already removed from the frame_order_cleanup branch in the assemble_scaling_matrix() function, however they were reintroduced accidentally via the parameter object where this information is now defined. So this removes the scaling a second time.
* Updated the frame order optimisation results for the 2-site CaM test data fitting to the rotor model. 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 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 2nd 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 ≤ θ<= theta_x sub>x<= theta_y /sub> ≤ θ<= sub>y</sub> ≤ π, as the old data was created with theta_x θ<sub>x</sub> > θ<sub>y</sub> theta_y. The new data is also of high quality using 20 million structures and numpy.float128 data averaging.* Created the 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 φ.
* Renamed the 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 the pipe_name argument to the specific_analyses.frame_order.data.generate_pivot() function. This allows the pivot from data pipes other than the current one to be assembled and returned.
* Updated the frame order optimisation results for the CaM torsionless, pseudo-ellipse 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.test_cam_pseudo_ellipse_free_rotor system test. This is for the change of the X and Y cone opening angles.
* Redesign and expansion of the nested model parameter copying in the frame order auto-analysis. The nested parameter protocol used to allow the analysis to complete in under 1,000,000 years was no longer functional due to the switching to the axis &alpha ; parameter to decrease parameter number and redundancy. The copying of the average domain position for the free rotor models was also incorrect as the dropping of the &alpha ; Euler angle cause the translation parameters and &beta ; and &gamma ; angles to change drastically. The new protocol has been split into four methods for the average domain position, the pivot point, the motional eigenframe and the parameters of ordering. These use the fact that the free rotor and torsionless models are the two extrema of the models where the torsion angle is restricted. The pivot copying is a new addition.
* Created the Frame_order.test_auto_analysis system test. This will be an extremely quick run through of the frame order auto-analysis as this is not currently tested. 1 Sobol' quasi-random integration point will be used for all models for speed. The system test uses the rigid CaM test data to perform a full analysis.
* Alphabetical ordering of the imports in the frame order auto-analysis module.
* 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 frame order auto-analysis. The grid search is now implemented as a zooming grid search.
* Updates and fixes for the frame order auto-analysis. The custom grid setup now works for the new reduced parameter set models and the double rotor model is now also included. The cone axis &alpha ; angle to spherical angle conversion has had a bug removed. And some of the printouts are now more detailed.
* Redesigned the Frame_order.test_auto_analysis system test. This now uses a hypothetical new Optimisation_settings object from the frame order auto-analysis module for holding all of the grid search, zooming grid search and minimisation settings. This will allow for far greater user control of the settings and hugely simplify the auto-analysis interface by decreasing the number of input arguments. It should also be less confusing.
* Implementation of the Optimisation_settings object in the frame order auto-analysis. This object holds all of the grid search, zooming grid search, and minimisation settings. It provides the add_grid() and add_min() methods to allow the user to add successive iterations of optimisation and settings to the object. The loop_grid() and loop_min() methods are used to loop over each iteration of each method. And the get_grid_inc(), get_grid_num_int_pts(), get_grid_zoom_level(), get_min_algor(), get_min_func_tol() and get_min_num_int_pts() methods are used to access the user defined settings. The auto-analysis has been redesigned around this new concept. All of the optimisation arguments have been replaced. Instead there are the opt_rigid, opt_subset, opt_full, and opt_mc arguments which are expected to be instances of the Optimisation_settings object. The optimisation in the auto-analysis is now more advanced in that more user optimisation settings are now available and active.
* Extended the Frame_order.test_axis_permutation system test to check frame_order.permute_axes twice. This will check that two calls to the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function] will restore the original parameter values.
* The [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function] can now handle the torsionless pseudo-ellipse. This model does not have the variable cdp.cone_sigma_max set.
* Added support for axis permutations in the frame order auto-analysis. This is done by copying the data pipe of the already optimised pseudo-elliptic models, permuting the axes, and performing another optimisation using all RDC and PCS data. This allows the second solution for these pseudo-elliptic models to be found. The 2nd 2<sup>nd</sup> pipe is included in the model selection step to allow the best solution for the model to be found.
* Fix for the reading of old results files in the frame order auto-analysis. The directory name is now processed by the model_directory() method. This will convert the spaces to '_' and remove commas. Without this the already created files could not be found, if the model name contains a space or comma.
* Made the pivot point in the frame order PDB representation fail-proof. If the pivot position was outside of the bounds [-1000, 1000], the PDB file creation would fail as the record would be too long. So now the pivot is shifted to be in these bounds.
* The axis permutation step in the frame order auto-analysis is now always performed. If an old results file was found, this step was accidentally skipped.
* 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 <= ≤ 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<y<z, x<z<y, z<x<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<y<z, x<z<y, and z<x<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.
* Updated the frame order pseudo-ellipse motion permutation test data. This is for the CaM frame order rotor model synthetic data. The correct axis and cone angle permutations of the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function] are now being used and optimised.
* Renamed the pseudo-ellipse permutation directory to perm_pseudo_ellipse_x_le_y_le_z. This is for the CaM frame order rotor model synthetic data.
* Fix for the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function]. One of the 6 permutations had the x and y axes switched (the x <= ≤ z <= ≤ y condition, permutation A).* Visualisation files for all of the pseudo-ellipse permutations by [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes]. This includes the x <= ≤ z <= ≤ y and z <= ≤ x <= ≤ y conditions (the previous files were for x <= ≤ y <= ≤ z). In all permutation combinations, optimisation has been performed to demonstrate that these are all local minima. These all approximate the rotor when using the CaM frame order rotor model synthetic data.
* Added support for the isotopic cone models to the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function]. This is a simpler setup, but it uses the same permutation algorithm as derived for the pseudo-ellipse models. Instead of setting the x and y cone angles separately, they are instead averaged. And as the cone axis is undefined in the xy plane, the axis has been randomly selected as being the axis perpendicular to both the z-axis and the reference frame x-axis.
* Created set of files showing the axis permutation problem for the isotopic cone frame order model. This shows that there are two minima. However one has a chi-squared value of ~1, and the other a value of ~150. Nevertheless, the optimisation could be trapped in the non-global minimum so the [http://www.nmr-relax.com/manual/frame_order_permute_axes.html frame_order.permute_axes user function] should be used for the isotopic cones as well, just in case.
* Created the other isotropic cone condition z <= ≤ x = y. As there are no constraints in this model, this condition should not result in any major differences, just the size of the cone being different and the optimisation having to decrease the cone angle significantly to mimic the rotor.
* Modified the frame order auto-analysis. The axis permutation algorithm is now performed on all isotopic cone and pseudo-ellipse models. This is just in case the non-global minima was found in the original optimisation. The isotropic cone models possess two local minima whereas the pseudo-ellipse models possess three local minima.
* Simplified the optimisation in the axis permutation part of the frame order auto-analysis. Only the last, highest quality setting is used for optimisation.
* Fix for the RelaxError raised by the [http://www.nmr-relax.com/manual/frame_order_select_model.html frame_order.select_model user function]. This is the error if the model name is incorrect.
* Created the Frame_order.test_pseudo_ellipse_zero_cone_angle system test. This is to catch a bug in optimisation when the cone_theta_x is set to zero in the pseudo-ellipse models.
* Bug fix for the lib.frame_order.pseudo_ellipse.tmax_pseudo_ellipse_array() function. The problem was that when theta_x θ<sub>x</sub> or theta_y θ<sub>y</sub> were zero, the floating point value of 0.0 would be returned. This is the incorrect behaviour as the returned value must be an array matching the dimensions of the &phi ; angle array argument.
* Fix for the Pseudo_elliptic cone object for when the cone angles are zero. The Pseudo_elliptic.phi_max() method now avoids a divide by zero error.
* Updates for all of the Frame_order.test_axis_perm_* system tests. The axis permutations and angle permutations are now performed correctly within the tests themselves. This allows the tests to pass.
* Fix for the 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 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 &sigma ; angles unpacking required a dimensionality collapse in the Sobol' angle data structure.
* Updated the number of points to allow the Frame_order.test_count_sobol_points_rotor system test to pass.
* The 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.
* More fixes for the 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 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 frame order count_sobol_points() function. The torsion angle ranges from -&pi ; to π, so the absolute value needs to be checked, just as in the 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.
* 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 chi2 χ<sup>2</sup> check in the 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 chi2 χ<sup>2</sup> value checks were updated. These were validated by increasing the number of integration points and watching the chi2 χ<sup>2</sup> value of the Frame_order.test_cam_*_pcs version of the system tests head to zero.* Another update for the chi2 χ<sup>2</sup> check in the Frame_order.test_rigid_data_to_free_rotor_model system test. The previous commit used an incorrect value for the chi2χ<sup>2</sup>. This new value is now much closer to the original.
* Turned down the verbosity of the update_model() frame order function. The verbosity flag is now accepted and set to zero by the get_param_names() API method and 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 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.
* 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 chi2 χ<sup>2</sup> check in the 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.
* Updated all of the Scipy quadratic integration frame order target functions. A number of the data structures in the target function class have been redesigned since these target functions were deleted. All of the func_*_quad_int*() target functions have been updated for these changes.
* Updated all of the chi2 χ<sup>2</sup> value checks for the Frame_order.test_cam_quad_int_* system tests. This is only for those tests which use PCS data - the RDC only test chi2 χ<sup>2</sup> values are the same as in the Frame_order.test_cam_qr_int_* system tests. In all cases, the chi2 χ<sup>2</sup> value is lower for the more accurate SciPy quadratic integration as compared to the quasi-random Sobol' integration, as expected.
* 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 chi2 χ<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 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 frame order auto-analysis 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 add_grid() and add_min() methods, and it returned by the new get_grid_quad_int() and get_min_quad_int() methods.
* Upgraded the 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 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 frame order specific API calculate() method. This was caught by the 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 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 chi2 χ<sup>2</sup> value printout is suppressed and the verbosity argument is being sent into the frame order count_sobol_points() function.
* Added a section printout to the 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.
* Improvements for the Grace files produced by the frame_order_simulate.py script. The model name is now set as a variable and is used for the subheading.
* Updated the frame_order_solution.py script for directly calculating the frame order matrix elements. The MODEL variable has been added in preparation for supporting all model types, and this is now added to the file name. The Grace header is now also being automatically generated and this matches that for the frame_order_simulation.py script.
* Zero values can now be handled in the pseudo-ellipse 1st 1<sup>st</sup> degree frame order matrix function. This is in lib.frame_order.pseudo_ellipse.compile_1st_matrix_pseudo_ellipse().* Removed some unused code in the pseudo-ellipse 2nd 2<sup>nd</sup> degree frame order matrix function. This is the compile_2nd_matrix_pseudo_ellipse() function in the lib.frame_order.pseudo_ellipse module. The change should make the RDC part of the frame order analysis for the pseudo-ellipse model slightly faster.
* Modified the rotate_daeg() function as this is independent of the degree of the frame order matrix. This is the lib.frame_order.matrix_ops.rotate_daeg() function.
* Fix for the compile_1st_matrix_pseudo_ellipse() function. This function of the lib.frame_order.pseudo_ellipse module now can rotate the 1st 1<sup>st</sup> degree frame order matrix out of its eigenframe and into the PDB frame.
* Created an executable Python script for mass converting the frame order matrix Grace graphs. The script converts the *.agr files to EPS and PNG files.
* Modified the frame order matrix Grace graph to EPS/PNG format conversion script. The binary being called is now 'grace' rather than 'xmgrace'. This allows different Grace versions to be used.
* Modified the frame order matrix Grace graph to EPS/PNG format conversion script. Grace is now used to create a PostScript file and then the ps2eps program is called to convert to EPS. This produces much better EPS files for inclusion into LaTeX documents.
* Redesign of the frame_order_solution.py script for calculating the frame order matrix elements. This script now loops over all models, all motional frame orientations, and all order parameters to generate the Grace graphs of all 1st 1<sup>st</sup> and 2nd 2<sup>nd</sup> degree frame order matrix elements. Therefore the script only needs to be executed once. The script also now calculates a point at zero (slightly shifted to 0.01 to avoid artifacts).* Added all of the Grace graphs produced by the frame_order_solution.py script. These are the graphs of the 1st 1<sup>st</sup> and 2nd 2<sup>nd</sup> degree frame order matrix elements, calculated using the functions in lib.frame_order.
* Updated frame_order_simulate.py to be much faster in simulating the frame order matrix elements. The script also matches the Grace file output of the frame_order_solution.py script. The inside() method has been renamed for the pseudo-ellipse and the infrastructure for adding support for the other frame order models has been added. By shifting calculations outside of the loops, the script is now many orders of magnitude faster.
* Implemented the compile_1st_matrix_rotor() function. This is for the lib.frame_order.rotor module. The function will calculate the 1st 1<sup>st</sup> degree in-frame frame order matrix for the rotor model.* Created the Grace graphs for the rotor model 1st 1<sup>st</sup> degree frame order matrix elements. These are the values calculated directly from the lib.frame_order modules. The graphs were previously all zeros.* Implemented the compile_1st_matrix_free_rotor() function. This is for the lib.frame_order.free_rotor module. The function will calculate the 1st 1<sup>st</sup> degree in-frame frame order matrix for the free rotor model.* Created the Grace graphs for the free rotor model 1st 1<sup>st</sup> degree frame order matrix elements. These are the values calculated directly from the lib.frame_order modules. The graphs were previously all zeros.* Implemented the compile_1st_matrix_iso_cone() function. This is for the lib.frame_order.iso_cone module. The function will calculate the 1st 1<sup>st</sup> degree in-frame frame order matrix for the isotropic cone model.* Created the Grace graphs for the isotropic cone model 1st 1<sup>st</sup> degree frame order matrix elements. These are the values calculated directly from the lib.frame_order modules. The graphs were previously all zeros.* Implemented the compile_1st_matrix_iso_cone_torsionless() function. This is for the lib.frame_order.iso_cone_torsionless module. The function will calculate the 1st 1<sup>st</sup> degree in-frame frame order matrix for the torsionless isotropic cone model.* Created the Grace graphs for the torsionless isotropic cone 1st 1<sup>st</sup> degree frame order matrix elements. These are the values calculated directly from the lib.frame_order modules. The graphs were previously all zeros.* Implemented the compile_1st_matrix_iso_cone_free_rotor() function. This is for the lib.frame_order.iso_cone_free_rotor module. The function will calculate the 1st 1<sup>st</sup> degree in-frame frame order matrix for the free rotor isotropic cone model.* Created the Grace graphs for the free rotor isotropic cone 1st 1<sup>st</sup> degree frame order matrix elements. These are the values calculated directly from the lib.frame_order modules. The graphs were previously all zeros.
* Docstring fixes for the new compile_1st_matrix_iso_cone() function.
* A minor speedup for the frame_order_simulate.py script. The angles are now being calculated at the very start prior to the main loop, removing repetitive calculations.
* The frame_order_simulate.py script now uses lib.text.progress.progress_meter(). This script for simulating the frame order matrix elements now uses the standard progress meter in relax to simplify the script. This should also speed up the calculations as the progress printouts were slowing down the calculations.
* Simulation of the pseudo-ellipse frame order matrix elements. This is for a simulation of 1,000,000 states for each angle increment, and includes in-frame and out-of-frame and varying of &theta ; X, Y, and Z. The resultant Grace graphs have been added to the repository.
* The frame order matrix element simulation script now uses the Kronecker outer product. This allows the frame order matrix to be in the same notation as that used internally in relax. It will cause the colours of the Sijkl_* curves to match between the simulation and solution scripts.
* Added the rotor model to the frame order matrix element simulation script. The generated in-frame and out-of-frame Grace graphs containing the matrix values for 1,000,000 simulation values have been added to the repository. The script was modified so that the rotation is generated by special rotation_*() methods which are aliased depending on the model.
* Added the free rotor model to the frame order matrix element simulation script. The generated in-frame and out-of-frame Grace graphs containing the matrix values for 1,000,000 simulation values have been added to the repository. The inside_free_rotor() method has been added to always return True for the rotation generated by rotation_z_axis().
* Simplifications and fixes for the 1st 1<sup>st</sup> degree frame order matrix calculation for the pseudo-ellipse. The compile_1st_matrix_pseudo_ellipse() function of the lib.frame_order.pseudo_ellipse module has been significantly simplified by shifting a lot of maths outside of the quadratic integration.* Updated all the calculated 1st 1<sup>st</sup> degree frame order matrix graphs for the pseudo-ellipse. The changes are due to the fixes in the lib.frame_order.pseudo_ellipse module.
* Simplifications for all of the torsionless pseudo-ellipse frame order matrix equations.
* Implemented the compile_1st_matrix_pseudo_ellipse_torsionless() function. This is for the lib.frame_order.pseudo_ellipse_torsionless module. The function will calculate the 1st 1<sup>st</sup> degree in-frame frame order matrix for the torsionless pseudo-ellipse model.* Created the Grace graphs for the torsionless pseudo-ellipse model 1st 1<sup>st</sup> degree frame order matrix. These are the values calculated directly from the lib.frame_order modules. The graphs were previously all zeros.* Added the isotropic cone model to the frame order matrix element simulation script. The generated in-frame and out-of-frame Grace graphs for the torsion angle cone_sigma_max, containing the matrix values for 1,000,000 simulation values have been added to the repository. The inside_iso_cone() method has been created to check for the theta_x θ<sub>x</sub> and theta_z θ_z angle violations from the rotation_hypersphere() method.
* Simplifications for the inside_*() methods of the frame order matrix element simulation script. The limit() method is now called only once outside of these methods and the maximum cone half-angles passed into the inside_*() methods. Although only slightly faster, this is mainly to simplify the code.
* Alphabetical ordering of methods in the frame order matrix element simulation script.
* Simplification of some of the pseudo-ellipse 2nd 2<sup>nd</sup> degree frame order matrix equations.* More simplifications of the pseudo-ellipse 2nd 2<sup>nd</sup> degree frame order matrix equations.* Integer to float conversions in part_int_daeg2_pseudo_ellipse_13(). This avoid integer to float conversion during execution, saving a little time for the pseudo-ellipse 2nd 2<sup>nd</sup> degree frame order matrix compilation.* Removal of many repetitive calculations in the pseudo-ellipse 2nd 2<sup>nd</sup> degree frame order matrix equations.* Simplifications of pseudo-ellipse 1st 1<sup>st</sup> degree frame order matrix functions. The xx, yy, and zz have been renamed to 00, 11, and 22 for consistency. And all sigma_max arguments have been dropped as they are not used.* Small numerical changes for the pseudo-ellipse 2nd 2<sup>nd</sup> degree frame order matrix graphs. These are only for the first point close to zero and the changes are minimal, caused by the recent simplifications of the code.* Created the Grace graphs for the free rotor pseudo-ellipse model 1st 1<sup>st</sup> degree frame order matrix. These are the values calculated directly from the lib.frame_order modules. The graphs were previously all zeros.* Implemented the compile_1st_matrix_pseudo_ellipse_free_rotor() function. This is for the lib.frame_order.pseudo_ellipse_free_rotor module. The function will calculate the 1st 1<sup>st</sup> degree in-frame frame order matrix for the free_rotor pseudo-ellipse model.* Speedups and simplifications of the free rotor pseudo-ellipse 2nd 2<sup>nd</sup> degree frame order matrix equations.
* Added the torsionless isotropic cone model to the frame order matrix element simulation script.
* Implemented the compile_1st_matrix_double_rotor() function. This is for the lib.frame_order.double_rotor module. The function will calculate the 1st 1<sup>st</sup> degree frame order matrix for the double_rotor model.* Created the Grace graphs for the double rotor model 1st 1<sup>st</sup> degree frame order matrix. These are the values calculated directly from the 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 relax lib.frame_order.pseudo_ellipse module.
* Fix for the pseudo-ellipse 1st 1<sup>st</sup> degree frame order matrix Daeg22 element.* Updated all of the pseudo-ellipse 1st 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.
* A few Frame_order system test updates for the float64 to float32 memory saving changes. The chi-squared value of 3 tests was slightly different.
* The frame order auto-analysis summary functions are now more robust. If the data pipe already exists for some reason, it is deleted prior to the new one being created.
* Changed the f[http://www.nmr-relax.com/manual/rame_order_quad_int.html rame_order.quad_int user function] argument default to True. This means that calling the user function without arguments will activate the quadratic integration rather than turning it off.
* Added the isotropic cone model frame order matrix simulation graphs for the cone opening angle theta_xθ<sub>x</sub>.
* Created and added all of the torsionless isotropic cone simulated frame order matrix element graphs.
* Added the free rotor isotropic cone model to the frame order matrix element simulation script. The generated Grace graphs containing the matrix values for 1,000,000 simulation values have been added to the repository. The self.torsion_check variable has been created to allow the inside_iso_cone() method to skip the torsion angle check when its value is False.
* Added the torsionless pseudo-ellipse model to the frame order matrix element simulation script. The generated Grace graphs containing the matrix values for 1,000,000 simulation values have been added to the repository. The rotations are generated by the rotation_hypersphere_torsionless() method and the angle violations checked using the inside_pseudo_ellipse() method.
* Bug fix for the torsionless pseudo-ellipse 1st 1<sup>st</sup> degree frame order matrix. The 11 element was of the wrong sign.* Fixes for the torsionless pseudo-ellipse 1st 1<sup>st</sup> degree frame order matrix element graphs.
* Added the free rotor pseudo-ellipse model to the frame order matrix element simulation script. This only required the self.torsion_check variable to be set to False. The model uses the inside_pseudo_ellipse() and rotation_hypersphere() methods.
* Fixes for free rotor isotropic cone 1st 1<sup>st</sup> degree frame order matrix graphs calculated using relax. The 1st 1<sup>st</sup> degree function accepts the cone opening angle &theta ; rather than the order parameter S.
* Added the frame order matrix element graphs for the in-frame free rotor pseudo-ellipse model.
* Added the frame order matrix element graphs for the out-of-frame free rotor pseudo-ellipse model.
* Added support for the double rotor model to the frame order matrix element simulation script. The double rotation is constructed in the new rotation_double_xy_axes() method, and the checks for the violation of the two torsion angles in the inside_double_rotor() method. In the main loop, the θ, &phi ; and &sigma ; angles correspond to sigma1, sigma2, and nothing.
* Fixes for all of the calculated double rotor model frame order matrix graphs. The X and Y angles were mixed up. The first torsion half-angle sigma1 corresponds to a y-axis rotation and the second sigma2 corresponds to a x-axis rotation.
* Added the frame order matrix element graphs for the double rotor model.
* A divide by zero fix for the torsionless pseudo-ellipse. This is in the compile_2nd_matrix_pseudo_ellipse_torsionless() relax library function.
* A divide by zero fix for the free rotor pseudo-ellipse. This is in the compile_2nd_matrix_pseudo_ellipse_free_rotor() relax library function.
* The 1st 1<sup>st</sup> angle for the calculated frame order matrix graphs is 0 for all non pseudo-ellipse models. This is for the frame_order_solution.py script. Only the pseudo-ellipse models where numerical integration is required fail for the angle of 0.0. Therefore the changing of the first angle from 0.0 to 0.01 only occurs for the pseudo-ellipse models. All graphs have been updated.* The 1st 1<sup>st</sup> pseudo-ellipse torsion angle value in the frame order matrix graphs is now 0.0. Only the cone opening angles set to 0.0 cause a failure in the pseudo-ellipse models, so the torsion angle is now allowed to start at exactly zero.
* Clean up of the frame order matrix element simulation script.
* Redesign of the free rotor isotropic cone frame order model - the order parameter has been replaced. From the frame order matrix element graphs in test_suite/shared_data/frame_order/sim_vs_pred_matrix, specifically Sijkl_iso_cone_free_rotor_in_frame_theta_x_calc.agr, Sijkl_iso_cone_free_rotor_axis2_1_3_theta_x_calc.agr, and Sijkl_iso_cone_free_rotor_out_of_frame_theta_x_calc.agr, it is clear that the symmetry of the order parameter after 120 degrees causes the 2nd 2<sup>nd</sup> degree frame order matrix to be incorrectly estimated. Therefore the S1 order parameter has been replaced with the original cone opening angle cone_theta. All parts of relax have been updated for this large conversion.* Updated the frame order matrix element graphs for the free rotor isotropic cone fixes. The cone S1 parameter has been converted back to the original cone &theta ; opening half-angle, allowing the 2nd 2<sup>nd</sup> degree frame order matrix elements to be properly calculated for all motions.
* Eliminated the lib.frame_order.iso_cone.populate_*() functions. The populate_1st_eigenframe_iso_cone() function was unused and incorrect, so it was deleted. The contents of the populate_2nd_eigenframe_iso_cone() function have been shifted compile_2nd_matrix_iso_cone() as a separate function is unnecessary. This now matches all the other lib.frame_order modules.
* Bug fix for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function]. The incorrect model number was being specified and hence the simulation was not starting from the optimised average domain position but rather the arbitrary position of the original structure.
* 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 > 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.
* Simplification for all of the Frame_order.test_pdb_model_* system tests. The model setup in all of these tests has been merged into the common setup_model() method. This not only removes a large quantity of repetitive code, but the new method can also be used for constructing future tests, for example for checking the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function].
* Created an initial version of the Frame_order.test_simulate_rotor_z_axis system test. This is to check the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] rotor model along the z-axis. It currently fails due to a bug in the user function.
* Fixes for the Frame_order.test_simulate_rotor_z_axis system test. Now 6 atoms are being created at X, -X, Y, -Y, Z, and -Z, 100 Angstrom from the origin. This is required so that the CoM is at the origin, to allow the CoM-pivot vector to be unchanged at [1, 0, 0] so that the axis &alpha ; angle of pi/2 creates an axis parallel to Z. The origin to atom distance check has also been loosened due to the PDB truncation artifact.
* Fix for the Frame_order.test_pdb_model_free_rotor_xz_plane_tilt system test. This was broken while implementing the Frame_order.test_simulate_rotor_z_axis system test. Instead of shifting the 6 atom structure so its CoM is the pivot of the motion when creating the atoms, now the Frame_order.test_simulate_rotor_z_axis system test sets the average domain translation vector to the pivot to achieve the same result. This preserves the z-axis orientation of the rotor models.
* Created the Frame_order.test_simulate_free_rotor_z_axis system test. This is to check the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] for the free rotor model along the z-axis.