Author: bugman Date: Thu Oct 1 21:08:55 2015 New Revision: 27925 URL: http://svn.gna.org/viewcvs/relax?rev=27925&view=rev Log: Merged revisions 23613-23615 via svnmerge from svn+ssh://bugman@xxxxxxxxxxx/svn/relax/branches/frame_order_cleanup ........ r23613 | bugman | 2014-06-03 08:53:25 +0200 (Tue, 03 Jun 2014) | 5 lines Optimisation of the rotor model to the rigid CaM frame order test data. The optimisation script and all results files have been added to the repository. ........ r23614 | bugman | 2014-06-03 09:00:25 +0200 (Tue, 03 Jun 2014) | 4 lines Increased the grid search bounds for the frame order average domain translation. Instead of being a 10 Angstrom box centred at {0, 0, 0}, now the translation search has been increased to a 100 Angstrom box. ........ r23615 | bugman | 2014-06-03 09:16:09 +0200 (Tue, 03 Jun 2014) | 8 lines Proper edge case handling and slight speed up of the frame order PCS integration functions. The case whereby no Sobol' points in the numerical integration lie within the motional distribution is now caught and the rotation matrix set to the motional eigenframe to simulate the rigid state. As the code for averaging the PCS was changed, it was also simplified by removing an unnecessary loop over all spins. This should speed up the PCS integration by a tiny amount. ........ Added: trunk/test_suite/shared_data/frame_order/cam/rigid/rotor_analysis/ - copied from r23615, branches/frame_order_cleanup/test_suite/shared_data/frame_order/cam/rigid/rotor_analysis/ Modified: trunk/ (props changed) trunk/lib/frame_order/double_rotor.py trunk/lib/frame_order/iso_cone.py trunk/lib/frame_order/iso_cone_torsionless.py trunk/lib/frame_order/pseudo_ellipse.py trunk/lib/frame_order/pseudo_ellipse_torsionless.py trunk/lib/frame_order/rotor.py trunk/specific_analyses/frame_order/api.py Propchange: trunk/ ------------------------------------------------------------------------------ --- svnmerge-integrated (original) +++ svnmerge-integrated Thu Oct 1 21:08:55 2015 @@ -1 +1 @@ -/branches/frame_order_cleanup:1-23195,23197-23205,23208-23612 +/branches/frame_order_cleanup:1-23195,23197-23205,23208-23615 Modified: trunk/lib/frame_order/double_rotor.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/frame_order/double_rotor.py?rev=27925&r1=27924&r2=27925&view=diff ============================================================================== --- trunk/lib/frame_order/double_rotor.py (original) +++ trunk/lib/frame_order/double_rotor.py Thu Oct 1 21:08:55 2015 @@ -129,11 +129,14 @@ # Increment the number of points. num += 1 - # Calculate the PCS and error. - for i in range(len(pcs_theta)): - for j in range(len(pcs_theta[i])): - # The average PCS. - pcs_theta[i, j] = c[i] * pcs_theta[i, j] / float(num) + # Default to the rigid state if no points lie in the distribution. + if num == 0: + pcs_pivot_motion_double_rotor(full_in_ref_frame=full_in_ref_frame, r_pivot_atom=r_pivot_atom, r_pivot_atom_rev=r_pivot_atom_rev, r_ln_pivot=r_ln_pivot, A=A, R_eigen=R_eigen, RT_eigen=RT_eigen, Ri_prime=R_eigen, pcs_theta=pcs_theta, pcs_theta_err=pcs_theta_err, missing_pcs=missing_pcs) + + # Average the PCS. + else: + for i in range(len(pcs_theta)): + pcs_theta[i] = c[i] * pcs_theta[i] / float(num) def pcs_pivot_motion_double_rotor(full_in_ref_frame=None, r_pivot_atom=None, r_pivot_atom_rev=None, r_ln_pivot=None, A=None, R_eigen=None, RT_eigen=None, Ri_prime=None, pcs_theta=None, pcs_theta_err=None, missing_pcs=None): Modified: trunk/lib/frame_order/iso_cone.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/frame_order/iso_cone.py?rev=27925&r1=27924&r2=27925&view=diff ============================================================================== --- trunk/lib/frame_order/iso_cone.py (original) +++ trunk/lib/frame_order/iso_cone.py Thu Oct 1 21:08:55 2015 @@ -109,11 +109,14 @@ # Increment the number of points. num += 1 - # Calculate the PCS and error. - for i in range(len(pcs_theta)): - for j in range(len(pcs_theta[i])): - # The average PCS. - pcs_theta[i, j] = c[i] * pcs_theta[i, j] / float(num) + # Default to the rigid state if no points lie in the distribution. + if num == 0: + pcs_pivot_motion_full_qrint(full_in_ref_frame=full_in_ref_frame, r_pivot_atom=r_pivot_atom, r_pivot_atom_rev=r_pivot_atom_rev, r_ln_pivot=r_ln_pivot, A=A, R_eigen=R_eigen, RT_eigen=RT_eigen, Ri_prime=R_eigen, pcs_theta=pcs_theta, pcs_theta_err=pcs_theta_err, missing_pcs=missing_pcs) + + # Average the PCS. + else: + for i in range(len(pcs_theta)): + pcs_theta[i] = c[i] * pcs_theta[i] / float(num) def populate_1st_eigenframe_iso_cone(matrix, angle): Modified: trunk/lib/frame_order/iso_cone_torsionless.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/frame_order/iso_cone_torsionless.py?rev=27925&r1=27924&r2=27925&view=diff ============================================================================== --- trunk/lib/frame_order/iso_cone_torsionless.py (original) +++ trunk/lib/frame_order/iso_cone_torsionless.py Thu Oct 1 21:08:55 2015 @@ -128,8 +128,11 @@ # Increment the number of points. num += 1 - # Calculate the PCS and error. - for i in range(len(pcs_theta)): - for j in range(len(pcs_theta[i])): - # The average PCS. - pcs_theta[i, j] = c[i] * pcs_theta[i, j] / float(num) + # Default to the rigid state if no points lie in the distribution. + if num == 0: + pcs_pivot_motion_torsionless_qrint(full_in_ref_frame=full_in_ref_frame, r_pivot_atom=r_pivot_atom, r_pivot_atom_rev=r_pivot_atom_rev, r_ln_pivot=r_ln_pivot, A=A, R_eigen=R_eigen, RT_eigen=RT_eigen, Ri_prime=R_eigen, pcs_theta=pcs_theta, pcs_theta_err=pcs_theta_err, missing_pcs=missing_pcs) + + # Average the PCS. + else: + for i in range(len(pcs_theta)): + pcs_theta[i] = c[i] * pcs_theta[i] / float(num) Modified: trunk/lib/frame_order/pseudo_ellipse.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/frame_order/pseudo_ellipse.py?rev=27925&r1=27924&r2=27925&view=diff ============================================================================== --- trunk/lib/frame_order/pseudo_ellipse.py (original) +++ trunk/lib/frame_order/pseudo_ellipse.py Thu Oct 1 21:08:55 2015 @@ -653,11 +653,14 @@ # Increment the number of points. num += 1 - # Calculate the PCS and error. - for i in range(len(pcs_theta)): - for j in range(len(pcs_theta[i])): - # The average PCS. - pcs_theta[i, j] = c[i] * pcs_theta[i, j] / float(num) + # Default to the rigid state if no points lie in the distribution. + if num == 0: + pcs_pivot_motion_full_qrint(full_in_ref_frame=full_in_ref_frame, r_pivot_atom=r_pivot_atom, r_pivot_atom_rev=r_pivot_atom_rev, r_ln_pivot=r_ln_pivot, A=A, R_eigen=R_eigen, RT_eigen=RT_eigen, Ri_prime=R_eigen, pcs_theta=pcs_theta, pcs_theta_err=pcs_theta_err, missing_pcs=missing_pcs) + + # Average the PCS. + else: + for i in range(len(pcs_theta)): + pcs_theta[i] = c[i] * pcs_theta[i] / float(num) def tmax_pseudo_ellipse(phi, theta_x, theta_y): Modified: trunk/lib/frame_order/pseudo_ellipse_torsionless.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/frame_order/pseudo_ellipse_torsionless.py?rev=27925&r1=27924&r2=27925&view=diff ============================================================================== --- trunk/lib/frame_order/pseudo_ellipse_torsionless.py (original) +++ trunk/lib/frame_order/pseudo_ellipse_torsionless.py Thu Oct 1 21:08:55 2015 @@ -314,8 +314,11 @@ # Increment the number of points. num += 1 - # Calculate the PCS and error. - for i in range(len(pcs_theta)): - for j in range(len(pcs_theta[i])): - # The average PCS. - pcs_theta[i, j] = c[i] * pcs_theta[i, j] / float(num) + # Default to the rigid state if no points lie in the distribution. + if num == 0: + pcs_pivot_motion_torsionless_qrint(full_in_ref_frame=full_in_ref_frame, r_pivot_atom=r_pivot_atom, r_pivot_atom_rev=r_pivot_atom_rev, r_ln_pivot=r_ln_pivot, A=A, R_eigen=R_eigen, RT_eigen=RT_eigen, Ri_prime=R_eigen, pcs_theta=pcs_theta, pcs_theta_err=pcs_theta_err, missing_pcs=missing_pcs) + + # Average the PCS. + else: + for i in range(len(pcs_theta)): + pcs_theta[i] = c[i] * pcs_theta[i] / float(num) Modified: trunk/lib/frame_order/rotor.py URL: http://svn.gna.org/viewcvs/relax/trunk/lib/frame_order/rotor.py?rev=27925&r1=27924&r2=27925&view=diff ============================================================================== --- trunk/lib/frame_order/rotor.py (original) +++ trunk/lib/frame_order/rotor.py Thu Oct 1 21:08:55 2015 @@ -130,14 +130,14 @@ # Increment the number of points. num += 1 - # Calculate the PCS and error. - for i in range(len(pcs_theta)): - for j in range(len(pcs_theta[i])): - if num == 0: - continue + # Default to the rigid state if no points lie in the distribution. + if num == 0: + pcs_pivot_motion_rotor_qrint(full_in_ref_frame=full_in_ref_frame, r_pivot_atom=r_pivot_atom, r_pivot_atom_rev=r_pivot_atom_rev, r_ln_pivot=r_ln_pivot, A=A, R_eigen=R_eigen, RT_eigen=RT_eigen, Ri_prime=R_eigen, pcs_theta=pcs_theta, pcs_theta_err=pcs_theta_err, missing_pcs=missing_pcs) - # The average PCS. - pcs_theta[i, j] = c[i] * pcs_theta[i, j] / float(num) + # Average the PCS. + else: + for i in range(len(pcs_theta)): + pcs_theta[i] = c[i] * pcs_theta[i] / float(num) def pcs_pivot_motion_rotor_qrint(full_in_ref_frame=None, r_pivot_atom=None, r_pivot_atom_rev=None, r_ln_pivot=None, A=None, R_eigen=None, RT_eigen=None, Ri_prime=None, pcs_theta=None, pcs_theta_err=None, missing_pcs=None): Modified: trunk/specific_analyses/frame_order/api.py URL: http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/frame_order/api.py?rev=27925&r1=27924&r2=27925&view=diff ============================================================================== --- trunk/specific_analyses/frame_order/api.py (original) +++ trunk/specific_analyses/frame_order/api.py Thu Oct 1 21:08:55 2015 @@ -376,6 +376,27 @@ # Reset. dist_type = None end_point = True + + # The pivot point. + if cdp.params[i] in ['pivot_x', 'pivot_y', 'pivot_z']: + val = getattr(cdp, cdp.params[i]) + lower = val - 10.0 + upper = val + 10.0 + + # Average domain position translation (in a +/- 5 Angstrom box). + if cdp.params[i] in ['ave_pos_x', 'ave_pos_y', 'ave_pos_z']: + lower = -50 + upper = 50 + + # Linear angle grid from 0 to one inc before 2pi. + if cdp.params[i] in ['ave_pos_alpha', 'ave_pos_gamma', 'eigen_alpha', 'eigen_gamma', 'axis_phi']: + lower = 0.0 + upper = 2*pi * (1.0 - 1.0/incs[i]) + + # Linear angle grid from -pi to one inc before pi. + if cdp.params[i] in ['axis_alpha']: + lower = -pi + upper = pi * (1.0 - 1.0/incs[i]) # Arccos grid from 0 to pi. if cdp.params[i] in ['ave_pos_beta', 'eigen_beta', 'axis_theta']: