mailr22677 - /trunk/specific_analyses/frame_order/optimisation.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on April 10, 2014 - 15:03:
Author: bugman
Date: Thu Apr 10 15:03:02 2014
New Revision: 22677

URL: http://svn.gna.org/viewcvs/relax?rev=22677&view=rev
Log:
Simplification of the 
specific_analyses.frame_order.optimisation.unpack_opt_results() function.

Looping over the cdp.params parameter list is now used to minimise the amount 
of replicated code.


Modified:
    trunk/specific_analyses/frame_order/optimisation.py

Modified: trunk/specific_analyses/frame_order/optimisation.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/frame_order/optimisation.py?rev=22677&r1=22676&r2=22677&view=diff
==============================================================================
--- trunk/specific_analyses/frame_order/optimisation.py (original)
+++ trunk/specific_analyses/frame_order/optimisation.py Thu Apr 10 15:03:02 
2014
@@ -761,99 +761,39 @@
     if scaling:
         param_vector = dot(scaling_matrix, param_vector)
 
-    # Pivot point.
-    if not pivot_fixed():
-        # Store the pivot.
-        cdp.pivot_x = param_vector[0]
-        cdp.pivot_y = param_vector[1]
-        cdp.pivot_z = param_vector[2]
-
-        # Then remove it from the params.
-        param_vector = param_vector[3:]
-
-    # Average domain position translation.
-    ave_pos_x, ave_pos_y, ave_pos_z = None, None, None
-    if not translation_fixed():
-        ave_pos_x = param_vector[0]
-        ave_pos_y = param_vector[1]
-        ave_pos_z = param_vector[2]
-
-        # Remove the parameters from the array.
-        param_vector = param_vector[3:]
-
-    # Unpack the parameters.
-    ave_pos_alpha, ave_pos_beta, ave_pos_gamma = None, None, None
-    eigen_alpha, eigen_beta, eigen_gamma = None, None, None
-    axis_theta, axis_phi, axis_alpha = None, None, None
-    cone_theta_x, cone_theta_y = None, None
-    cone_theta = None
-    cone_s1 = None
-    cone_sigma_max = None
-    if cdp.model == 'pseudo-ellipse':
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma, eigen_alpha, eigen_beta, 
eigen_gamma, cone_theta_x, cone_theta_y, cone_sigma_max = param_vector
-    elif cdp.model in ['pseudo-ellipse, torsionless', 'pseudo-ellipse, free 
rotor']:
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma, eigen_alpha, eigen_beta, 
eigen_gamma, cone_theta_x, cone_theta_y = param_vector
-    elif cdp.model == 'iso cone':
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma, axis_theta, axis_phi, 
cone_theta, cone_sigma_max = param_vector
-    elif cdp.model in ['iso cone, torsionless']:
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma, axis_theta, axis_phi, 
cone_theta = param_vector
-    elif cdp.model in ['iso cone, free rotor']:
-        ave_pos_beta, ave_pos_gamma, axis_theta, axis_phi, cone_s1 = 
param_vector
-        ave_pos_alpha = None
-    elif cdp.model == 'line':
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma, eigen_alpha, eigen_beta, 
eigen_gamma, cone_theta_x, cone_sigma_max = param_vector
-    elif cdp.model in ['line, torsionless', 'line, free rotor']:
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma, eigen_alpha, eigen_beta, 
eigen_gamma, cone_theta_x, cone_sigma_max = param_vector
-    elif cdp.model in ['rotor']:
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma, axis_alpha, 
cone_sigma_max = param_vector
-    elif cdp.model in ['free rotor']:
-        ave_pos_beta, ave_pos_gamma, axis_theta, axis_phi = param_vector
-        ave_pos_alpha = None
-    elif cdp.model == 'rigid':
-        ave_pos_alpha, ave_pos_beta, ave_pos_gamma = param_vector
+    # The parameters to wrap.
+    wrap = [
+        'ave_pos_alpha',
+        'ave_pos_beta',
+        'ave_pos_gamma',
+        'eigen_alpha',
+        'eigen_beta',
+        'eigen_gamma',
+        'axis_theta',
+        'axis_phi'
+    ]
 
     # Monte Carlo simulation data structures.
     if sim_index != None:
-        # Average position parameters.
-        if ave_pos_x != None:
-            cdp.ave_pos_x_sim[sim_index] = ave_pos_x
-        if ave_pos_y != None:
-            cdp.ave_pos_y_sim[sim_index] = ave_pos_y
-        if ave_pos_z != None:
-            cdp.ave_pos_z_sim[sim_index] = ave_pos_z
-        if ave_pos_alpha != None:
-            cdp.ave_pos_alpha_sim[sim_index] = wrap_angles(ave_pos_alpha, 
cdp.ave_pos_alpha-pi, cdp.ave_pos_alpha+pi)
-        if ave_pos_beta != None:
-            cdp.ave_pos_beta_sim[sim_index] = wrap_angles(ave_pos_beta, 
cdp.ave_pos_beta-pi, cdp.ave_pos_beta+pi)
-        if ave_pos_gamma != None:
-            cdp.ave_pos_gamma_sim[sim_index] = wrap_angles(ave_pos_gamma, 
cdp.ave_pos_gamma-pi, cdp.ave_pos_gamma+pi)
-
-        # Eigenframe parameters.
-        if eigen_alpha != None:
-            cdp.eigen_alpha_sim[sim_index] = wrap_angles(eigen_alpha, 
cdp.eigen_alpha-pi, cdp.eigen_alpha+pi)
-        if eigen_beta != None:
-            cdp.eigen_beta_sim[sim_index] =  wrap_angles(eigen_beta, 
cdp.eigen_beta-pi, cdp.eigen_beta+pi)
-        if eigen_gamma != None:
-            cdp.eigen_gamma_sim[sim_index] = wrap_angles(eigen_gamma, 
cdp.eigen_gamma-pi, cdp.eigen_gamma+pi)
-        if axis_theta != None:
-            cdp.axis_theta_sim[sim_index] = wrap_angles(axis_theta, 
cdp.axis_theta-pi, cdp.axis_theta+pi)
-        if axis_phi != None:
-            cdp.axis_phi_sim[sim_index] = wrap_angles(axis_phi, 
cdp.axis_phi-pi, cdp.axis_phi+pi)
-        if axis_alpha != None:
-            cdp.axis_alpha_sim[sim_index] = wrap_angles(axis_alpha, 
cdp.axis_alpha-pi, cdp.axis_alpha+pi)
-
-        # Cone parameters.
-        if cone_theta != None:
-            cdp.cone_theta_sim[sim_index] = cone_theta
-        if cone_s1 != None:
-            cdp.cone_s1_sim[sim_index] = cone_s1
-            cdp.cone_theta_sim[sim_index] = 
order_parameters.iso_cone_S_to_theta(cone_s1)
-        if cone_theta_x != None:
-            cdp.cone_theta_x_sim[sim_index] = cone_theta_x
-        if cone_theta_y != None:
-            cdp.cone_theta_y_sim[sim_index] = cone_theta_y
-        if cone_sigma_max != None:
-            cdp.cone_sigma_max_sim[sim_index] = abs(cone_sigma_max)
+        # Loop over the parameters.
+        for i in range(len(cdp.params)):
+            # Angle wrapping around the real value.
+            if cdp.params[i] in wrap or cdp.params[i] == 'axis_alpha':
+                val = getattr(cdp, cdp.params[i])
+                param_vector[i] = wrap_angles(param_vector[i], val-pi, 
val+pi)
+
+            # FIXME: Implement linear constraints via the log-barrier 
algorithm, then delete this.
+            # Handle negative values of the cone_sigma_max parameter.
+            if cdp.params[i] == 'cone_sigma_max':
+                param_vector[i] = abs(param_vector[i])
+
+            # Store the value.
+            obj = getattr(cdp, cdp.params[i]+'_sim')
+            obj[sim_index] = param_vector[i]
+
+            # Order parameter to angle conversion.
+            if cdp.params[i] == 'cone_s1':
+                cdp.cone_theta_sim[sim_index] = 
order_parameters.iso_cone_S_to_theta(param_vector[i])
 
         # Optimisation stats.
         cdp.chi2_sim[sim_index] = func
@@ -865,46 +805,25 @@
 
     # Normal data structures.
     else:
-        # Average position parameters.
-        if ave_pos_x != None:
-            cdp.ave_pos_x = ave_pos_x
-        if ave_pos_y != None:
-            cdp.ave_pos_y = ave_pos_y
-        if ave_pos_z != None:
-            cdp.ave_pos_z = ave_pos_z
-        if ave_pos_alpha != None:
-            cdp.ave_pos_alpha = wrap_angles(ave_pos_alpha, 0.0, 2.0*pi)
-        if ave_pos_beta != None:
-            cdp.ave_pos_beta = wrap_angles(ave_pos_beta, 0.0, 2.0*pi)
-        if ave_pos_gamma != None:
-            cdp.ave_pos_gamma = wrap_angles(ave_pos_gamma, 0.0, 2.0*pi)
-
-        # Eigenframe parameters.
-        if eigen_alpha != None:
-            cdp.eigen_alpha = wrap_angles(eigen_alpha, 0.0, 2.0*pi)
-        if eigen_beta != None:
-            cdp.eigen_beta =  wrap_angles(eigen_beta,  0.0, 2.0*pi)
-        if eigen_gamma != None:
-            cdp.eigen_gamma = wrap_angles(eigen_gamma, 0.0, 2.0*pi)
-        if axis_theta != None:
-            cdp.axis_theta = wrap_angles(axis_theta, 0.0, 2.0*pi)
-        if axis_phi != None:
-            cdp.axis_phi = wrap_angles(axis_phi, 0.0, 2.0*pi)
-        if axis_alpha != None:
-            cdp.axis_alpha = wrap_angles(axis_alpha, -pi, pi)
-
-        # Cone parameters.
-        if cone_theta != None:
-            cdp.cone_theta = cone_theta
-        if cone_s1 != None:
-            cdp.cone_s1 = cone_s1
-            cdp.cone_theta = order_parameters.iso_cone_S_to_theta(cone_s1)
-        if cone_theta_x != None:
-            cdp.cone_theta_x = cone_theta_x
-        if cone_theta_y != None:
-            cdp.cone_theta_y = cone_theta_y
-        if cone_sigma_max != None:
-            cdp.cone_sigma_max = abs(cone_sigma_max)
+        # Loop over the parameters.
+        for i in range(len(cdp.params)):
+            # Angle wrapping.
+            if cdp.params[i] in wrap:
+                param_vector[i] = wrap_angles(param_vector[i], 0.0, 2.0*pi)
+            if cdp.params[i] == 'axis_alpha':
+                param_vector[i] = wrap_angles(param_vector[i], -pi, pi)
+
+            # FIXME: Implement linear constraints via the log-barrier 
algorithm, then delete this.
+            # Handle negative values of the cone_sigma_max parameter.
+            if cdp.params[i] == 'cone_sigma_max':
+                param_vector[i] = abs(param_vector[i])
+
+            # Store the value.
+            setattr(cdp, cdp.params[i], param_vector[i])
+
+            # Order parameter to angle conversion.
+            if cdp.params[i] == 'cone_s1':
+                cdp.cone_theta = 
order_parameters.iso_cone_S_to_theta(param_vector[i])
 
         # Optimisation stats.
         cdp.chi2 = func




Related Messages


Powered by MHonArc, Updated Thu Apr 10 15:20:02 2014