Open main menu

Changes

Relax 4.0.0

6,310 bytes added, 15:08, 13 October 2015
Links to the API documentation (part 2).
* 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 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 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 [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html Frame_order.test_cam_rotor2* system tests ] for the higher quality data.
* Expanded the 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 [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#grid_search grid_search() API method ] is similar to the previous fix for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.api.Frame_order-class.html#minimise minimise() method]. The [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.parameters-module.html#linear_constraints linear_constraint() function ] was returning A, b = [], [] for these models, but these empty numpy arrays were causing the 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 &alpha;. 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.
* 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 ave_pos_alpha parameter from the [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#func_pseudo_ellipse_free_rotor_qr_int 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 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.
* 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.
* The CaM frame order data generation base script now uses [http://www.nmr-relax.com/api/4.0/lib.compat-module.html#norm lib.compat.norm()]. This is to allow the test suite to pass on systems with old numpy versions whereby the numpy.linalg.norm() function does not support the new axis argument.
* 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 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#func_double_rotor_qr_int double rotor frame order model target function ] to use the new parameterisation.* Fix for the PDB representation generated by [http://www.nmr-relax.com/manual/frame_order.pdb_model .html frame_order.pdb_model] for the free rotor pseudo-ellipse.* Fix for the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_rigid_data_to_free_rotor_model Frame_order.test_rigid_data_to_free_rotor_model system test]. As the free rotor has undergone a reparameterisation, the chi-squared value is now higher. The value is reasonable as the free rotor can never model the rigid system.
* Removed the structure loading and transformation from the CaM frame order system tests. This was mimicking the old behaviour of the auto-analysis. However as that behaviour has been shifted into the backend of the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function], which is called by these system tests as well, the code is now redundant and is wasting test suite time.
* Removed the setting of the second pivot point in the CaM frame order system tests. The second pivot point has been removed from the double rotor frame order model to eliminate parameter redundancy, so no models now have a conventional second pivot.
* Modified the CaM frame order system test base script to test alternative code paths. This pivot point was fixed in all tests, so the code in the target functions behind the pivot_opt flag was not being tested. Now for those system tests whereby the [http://www.nmr-relax.com/manual/calc.html calc] rather than [http://www.nmr-relax.com/manual/minimise.html minimise] user function is called, the pivot is no longer fixed to execute this code.
* 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#calc_vectors 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#calc_vectors 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#__init__ __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 1<sup>st</sup> technique, which is currently used in the frame order analysis, and the 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#__init__ target function __init__() method]. In one test of the pseudo-ellipse, the time dropped from 191 seconds to 172.
* Added another timing script for helping with speeding up the frame order analysis. This is for the part where the rotation matrix for each Sobol' integration point is shifted into the eigenframe.
* Python 3 fix for the CaM frame order system test base script.
* 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#func_pseudo_ellipse_qr_int 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;<sub>y</sub> is now performed to avoid many unnecessary calls to the [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse-module.html#tmax_pseudo_ellipse 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#calc_vectors 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.* Updated the double rotor frame order model to be in a pseudo-functional state. Bugs in the target function method have been removed, the [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#calc_vectors calc_vectors() target function method] now accepts the pivot2 argument (but does nothing with it yet), and the [http://www.nmr-relax.com/api/4.0/lib.frame_order.double_rotor -module .html lib.frame_order.double_rotor module] has been updated to match the logic used in all other [http://www.nmr-relax.com/api/4.0/lib.frame_order-module.html lib.frame_order modules].
* The [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] no longer tries to create a cone object for the double rotor.
* Added a timeit script and log file for different ways of checking a binary numpy array.
* Modified the rigid_test.py system test script to really be the rigid case. This is used in all of the Frame_order.test_rigid_data_to_*_model system tests. Previously the parameters of the dynamics were set to being close to zero, to catch the cases were a few Sobol' PCS integration points were accepted. But now the case were no Sobol' points can be used is being tested. This checks a code path currently untested in the test suite, demonstrating many failures.
* Fix for the frame order matrix calculation for a pseudo-elliptic cone with angles of zero degrees. The [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse_torsionless-module.html#compile_2nd_matrix_pseudo_ellipse_torsionless lib.frame_order.pseudo_ellipse_torsionless.compile_2nd_matrix_pseudo_ellipse_torsionless() function ] has been changed to prevent a divide by zero failure. The surface area normalisation factor now defaults to 0.0.
* 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.
* Changed the parameter values for the Frame_order.test_cam_pseudo_ellipse_torsionless* system tests. The &theta;<sub>x</sub> and &theta;<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 Ln<sup>3+</sup> 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 1<sup>st</sup> pivot to atom vector rotated by the 1<sup>st</sup> mode of motion; the 2<sup>nd</sup> pivot to 1<sup>st</sup> pivot vector rotated by the 2<sup>nd</sup> mode of motion (together with the rotated 1<sup>st</sup> pivot to atom vectors); and the lanthanide to second pivot vector. All these vectors are passed into the [http://www.nmr-relax.com/api/4.0/lib.frame_order.double_rotor-module.html#pcs_numeric_qr_int_double_rotor lib.frame_order.double_rotor.pcs_numeric_int_double_rotor() function], which passes them to the [http://www.nmr-relax.com/api/4.0/lib.frame_order.double_rotor-module.html#pcs_pivot_motion_double_rotor_qr_int pcs_pivot_motion_double_rotor() function ] where they are rotated and reconstructed into the Ln<sup>3+</sup> 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 [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#create_sobol_data create_sobol_data() target function method]. The [http://www.nmr-relax.com/api/4.0/target_functions.frame_order.Frame_order-class.html#calc_vectors 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 2<sup>nd</sup> pivot is optimised and the inter-pivot distance along the z-axis gives the position of the 1<sup>st</sup> pivot. For the [http://www.nmr-relax.com/api/4.0/lib.frame_order.double_rotor-module.html 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 [http://www.nmr-relax.com/api/4.0/lib.frame_order.double_rotor-module.html#pcs_numeric_qr_int_double_rotor pcs_numeric_int_double_rotor() function]. These rotations are frame shifted into the eigenframe of the motion, and then correctly passed into [http://www.nmr-relax.com/api/4.0/lib.frame_order.double_rotor-module.html#pcs_pivot_motion_double_rotor_qr_int 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.
* Corrected the printout from the CaM frame order data generation base script. The number of states used in the distribution of domain positions is now correctly reported for the models with multiple modes of motion.
* Created a frame order optimisation script for the CaM double rotor test suite data. This is the script used for testing the implementation, it will not be used in the test suite.
* Created the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_rigid_data_to_double_rotor_model Frame_order.test_rigid_data_to_double_rotor_model system test]. This shows that the double rotor model works perfectly when the domains of the molecule are rigid.
* Fix for the frame order target functions for when no PCS data is present. In this case, the self.pivot structure was being created as an empty array rather than a rank-2 array with dimensions 1 and 3. This was causing the rotor models to fail, as this pivot is used to recreate the rotation axis.
* Fix for the CaM double rotor frame order system tests. The torsion angle cone_sigma_max is a half angle, therefore the full angles from the data generation script are now halved in the system test script.
* Created 3 frame order system tests for the new large angle double rotor CaM synthetic data. These are the [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_cam_qr_int_double_rotor_large_angle Frame_order.test_cam_double_rotor_large_angle], [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_cam_qr_int_double_rotor_large_angle_rdc Frame_order.test_cam_double_rotor_large_angle_rdc], and [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#test_cam_qr_int_double_rotor_large_angle_pcs 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 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.
* 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 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 [http://www.nmr-relax.com/api/4.0/test_suite.system_tests.frame_order.Frame_order-class.html#mesg_opt_debug 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.
* The double rotor frame order system tests are no longer blacklisted.
* Updated the chi-squared values being checked for the double rotor frame order system tests.
* Shifted the frame order geometric representation functions into their own module. This is the new [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric -module.html 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 [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html 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 [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot specific_analyses.frame_order.data.generate_pivot() function]. It will generate the 1<sup>st</sup> or 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 [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_rotors 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 [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot specific_analyses.frame_order.data.generate_pivot() function]. This is for the double rotor model where the 1<sup>st</sup> mode of motion is about the 2<sup>nd</sup> pivot, and the 2<sup>nd</sup> mode of motion about the 1<sup>st</sup> pivot.* Fixes for the cone geometric representation in the internal structural object. The representation can now be created if the given [http://www.nmr-relax.com/api/4.0/data_store.mol_res_spin.MoleculeContainer-class.html MoleculeContainer object ] is empty.* Refactored the frame order geometric motional representation code. The code of the specific_analyses.frame_order.geometric.[http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#create_geometric_rep create_geometric_rep() function ] has been spun out into 3 new functions: [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_rotors add_rotors()], [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_axes add_axes()], and [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_cones add_cones()]. This is to better isolate the various elements to allow for better control. Each function now adds the atoms for its geometric representation to a separate molecule called 'axes' or 'cones'. The add_rotors() does not create a molecule as the [http://www.nmr-relax.com/api/4.0/lib.structure.represent.rotor-module.html#rotor lib.structure.represent.rotor.rotor_pdb() function ] creates its own. As part of the rafactorisation, the neg_cone flag has been eliminated.
* Renamed the residues of the rotor geometric object representation. The rotor axis atoms now belong to the RTX residue and the propeller blades to the RTB residue. The 'RT' at the start represents the rotor and this will allow all the geometric objects to be better isolated.
* Improvements to the [http://www.nmr-relax.com/api/4.0/lib.structure.internal.object.Internal-class.html#_get_chemical_name internal structural object _get_chemical_name() method]. This now uses a translation table to convert the hetID or residue name into a description, for example as used in the PDB HETNAM records to give a human readable description of the residue inside the PDB file itself. The new rotor RTX and RTB residue names have been added to the table as well.* Renaming of the residues of the cone geometric representation. The cone apex or centre is now the CNC residue, the cone axis is now CNX and the cone edge is now CNE. These used to be APX, AXE, and EDG respectively. The aim is to make these names 100% specific to the cone object so that they can be more easily selected for manipulating the representation and so that they are more easily identifiable. The [http://www.nmr-relax.com/api/4.0/lib.structure.internal.object.Internal-class.html#_get_chemical_name internal structural object _get_chemical_name() function ] now returns a description for each of these. Note that the main cone object is still named CON.
* The motional pivots for the frame order models are now labelled in the geometric representation. The pivot points are now added as a new molecule called 'pivots' in the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. The atoms all belong to the PIV residue. The [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order user function] now selects this residue, hides its atoms, and then shows the atom name 'Piv' as the label. For the double rotor model, the atom names 'Piv1' and 'Piv2' are used to differentiate the pivots.
* Renamed the [http://www.nmr-relax.com/api/4.0/lib.structure.represent.rotor-module.html#rotor lib.structure.represent.rotor.rotor_pdb() function to rotor()]. This function is not PDB specific and it just creates a 3D structural representation of a rotor object.* Added support for labels in the rotor geometric object for the internal structural object. The labels are created by the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] backend. For the double rotor model, these are 'x-ax' and 'y-ax'. For all other models, the label is 'z-ax'. The labels are then sent into the [http://www.nmr-relax.com/api/4.0/lib.structure.represent.rotor-module.html#rotor lib.structure.represent.rotor.rotor() function ] via the new label argument. This function adds two new atoms to the rotor molecule which are 2 Angstrom outside of the rotor span and lying on the rotor axis. These then have their atom name set to the label. The residue name is set to the new RTL name which has been added to the [http://www.nmr-relax.com/api/4.0/lib.structure.internal.object.Internal-class.html#_get_chemical_name internal structural object _get_chemical_name() method ] to describe the residue in the PDB file for the user. Finally the [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order user function] selects these atoms, hides them and then labels them using the atom name (x-ax, y-ax, or z-ax).
* Modified the rotor representation generated by the [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order user function]. This is to make the object less bulky.
* Redesign of the axis geometric representation for the frame order motions. This is now much more model dependent to avoid clashes with the rotor objects and other representations: For the torsionless isotropic cone, a single z-axis is created; For the double rotor, a single z-axis is produced connecting the two pivots, from pivot2 to pivot1; For the pseudo-ellipse and free rotor pseudo-ellipse, the x and y-axes are created; For the torsionless pseudo-ellipse, all three x, y and z-axes are created; For all other models, no axis system is produced as this has been made redundant by the rotor objects.
* Fixes for the cone geometric object created by the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. This was broken by the code refactoring and now works again for the pseudo-ellipse models.
* Fix for the [http://www.nmr-relax.com/manual/pymol_frame_order.html pymol.frame_order user function]. The representation function for the rotor objects was hiding all parts of the representation, hence the pivot labels where being hidden. To fix this, the hiding of the geometric object now occurs in the base [http://www.nmr-relax.com/api/4.0/pipe_control.pymol_control-module.html#frame_order_geometric frame_order_geometric() function ] prior to setting up the representations for the various objects.
* Started to redesign the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. Instead of having the positive and negative representations in different PDB models, and the Monte Carlo simulations in different molecules, these will now all be shifted into separate files. For this to be possible, the file root rather than file names must now be supplied to the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. To allow for different file compression, the compress_type argument is now used. The backend code correctly handles the file root change, but the multiple files are not created yet.
* Python 3 fixes using the 2to3 script. Fatal changes to the [http://www.nmr-relax.com/api/4.0/multi.processor-module.html multi.processor module ] were reverted.* Improvements to the [http://www.nmr-relax.com/api/4.0/lib.structure.represent.rotor-module.html#rotor lib.structure.represent.rotor.rotor() function ] for handling models. The 'rotor', 'rotor2', or 'rotor3' molecule name determination is now also model specific.* The frame order generate_pivot() function can now return the pivots for Monte Carlo simulations. This is the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot specific_analyses.frame_order.data.generate_pivot() function]. The sim_index argument has been added to the function which will allow the pivots from the Monte Carlo simulations to be returned. If the pivot was fixed, then the original pivot will be returned instead.
* Test suite fixes for the recent redesign of the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function].
* Fixes for the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] for the rotor and free rotor models.
* 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;<sup>max</sup> 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 [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse-module.html#tmax_pseudo_ellipse_array tmax_pseudo_ellipse_array() function]. This allows the calculation of the pseudo-elliptic cone opening &theta;<sup>max</sup> 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.
* 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 &phi;.
* 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 [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot specific_analyses.frame_order.data.generate_pivot() function]. This 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 free rotor, 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, 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.
* Modified the frame order check_pivot() function to operate on any data pipe. The function now accepts the pipe_name argument so that checks can happen on any data pipe.
* Missing imports in the specific_analyses.frame_order.checks module. This is from the recent pipe_name argument addition in the check_pivot() function.
* The [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot frame order generate_pivot() function ] can now handle no pivot being present. At the start of this specific_analyses.frame_order.data module function, the check_pivot() function is being called to make sure that a pivot is present.
* Modified the Frame_order.test_frame_order_pdb_model_ensemble system test so it is set up correctly. The pivot point and moving domain are now specified.
* Added Monte Carlo simulations to the Frame_order.test_frame_order_pdb_model_ensemble system test. This is only setting up Monte Carlo simulation data structures via the [http://www.nmr-relax.com/manual/monte_carlo_setup.html monte_carlo.setup user function]. This demonstrates a failure of the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] when an ensemble of structures is present with Monte Carlo simulations.
* Modified the frame order sim_init_values() API method to handle missing optimisation data. The [http://www.nmr-relax.com/manual/monte_carlo_initial_values.html monte_carlo.initial_values user function] was failing if optimisation had not been performed. This is now caught and handled correctly.
* Created the Frame_order.test_frame_order_pdb_model_failed_pivot system test. This simply shows how the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] currently fails if the optimised pivot point is outside of the PDB coordinate limits of "%8.3f".
* The [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] can now properly handle a failed pivot optimisation. This is when the pivot point optimises to a coordinate outside of the PDB limits. Now all calls to [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot specific_analyses.frame_order.data.generate_pivot() ] from the module specific_analyses.frame_order.geometric set the pdb_limit flag to True. This allows all representation objects to be within the PDB limits. The algorithm in generate_pivot() has been extended to allow higher positive values, as the real PDB limits are [-999.999, 9999.999]. And a RelaxWarning is called when the pivot is outside to tell the user about it.
* Modified the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis] to be more fail-safe. Almost all of the protocol is now within a try-finally block so that the execution lock will always be released.
* Fix for the specific_analyses.frame_order.data.pivot_fixed() function. This was recently introduced when the check for PCS data was removed from this function. To fix the problem, instead of calling base_data_types() to see if PCS data is present, the cdp.pcs_ids data structure is checked instead.
* Fix for the model argument for the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. The deletion of structural models for the Monte Carlo simulations in the average domain position representation now only happen if more than one model exists.
* Modified the Frame_order.test_frame_order_pdb_model_failed_pivot system test. This is to show that the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] fails if the pivot is close to but still within the PDB coordinate limits.
* Modified the pivot position checking in [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot specific_analyses.frame_order.data.generate_pivot()]. Now the pivot is shifted to be within the limits shrunk by 100 Angstrom. This allows any PDB representation created by the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function] to be within the PDB limits.
* Fix for the axis permutation protocol in the [http://www.nmr-relax.com/api/4.0/auto_analyses.frame_order-module.html frame order auto-analysis]. If a results file was found for one of the permutations, a return from the function would occur. The result is that the other permutations would not be loaded or optimised.
* 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 [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse-module.html#tmax_pseudo_ellipse_array lib.frame_order.pseudo_ellipse.tmax_pseudo_ellipse_array() function]. The problem was that when &theta;<sub>x</sub> or &theta;<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.
* Speedups and simplifications of the free rotor pseudo-ellipse 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 [http://www.nmr-relax.com/api/4.0/lib.frame_order.double_rotor-module.html lib.frame_order.double_rotor module]. The function will calculate the 1<sup>st</sup> degree frame order matrix for the double_rotor model.
* Created the Grace graphs for the double rotor model 1<sup>st</sup> degree frame order matrix. These are the values calculated directly from the 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.
* 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 [http://www.nmr-relax.com/api/4.0/lib.frame_order.pseudo_ellipse_torsionless-module.html#compile_2nd_matrix_pseudo_ellipse_torsionless 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 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.
* 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.
* Size fix for the rotor representation from the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. The size problem was detected via the Frame_order.test_pdb_model_rotor system test. The rotors in the PDB representation were all fixed in size, and ignored the 'size' argument of the [http://www.nmr-relax.com/manual/frame_order_pdb_model.html frame_order.pdb_model user function]. The size argument is now passed into the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html#add_rotors add_rotors() function ] of the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.geometric-module.html specific_analyses.frame_order.geometric module] and passed on to the rotor() function of the lib.structure.represent.rotor module.
* Created the Frame_order.test_pdb_model_rotor2 system test to check for an offset pivot. The pivot is set to [1, 0, 1] so that the rotor axis is tilted -45 degrees in the xz-plane. And the size of the geometric object is set to 100 Angstrom for better testing of the sizes of the elements.
* Simplification of the Frame_order.test_pdb_model_rotor system test. The size is now programatically handled.
* Added the pipe_name argument to the frame order check_model() function. This is for the specific_analyses.frame_order.checks module.
* Converted the specific_analyses.frame_order.checks module to the new Check object design. This follows from http://wiki.nmr-relax.com/Relax_source_design#The_check_.2A.28.29_functions and the changes significantly simplify the checking objects.
* Improved checking for the [http://www.nmr-relax.com/api/4.0/specific_analyses.frame_order.data-module.html#generate_pivot frame order generate_pivot() function]. The check_model() checking object is now called to make sure the frame order model has been specified, as this is essential for this function.
* Created two system tests for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] for the double rotor model. These are Frame_order.test_simulate_double_rotor_mode1_z_axis and Frame_order.test_simulate_double_rotor_mode2_z_axis.
* Created two system tests for the [http://www.nmr-relax.com/manual/frame_order_simulate.html frame_order.simulate user function] for the double rotor model. These are Frame_order.test_simulate_double_rotor_mode1_xz_plane_tilt and Frame_order.test_simulate_double_rotor_mode2_xz_plane_tilt.
Trusted, Bureaucrats
4,223

edits