mailr26025 - /branches/frame_order_cleanup/auto_analyses/frame_order.py


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

Header


Content

Posted by edward on September 25, 2014 - 09:39:
Author: bugman
Date: Thu Sep 25 09:39:41 2014
New Revision: 26025

URL: http://svn.gna.org/viewcvs/relax?rev=26025&view=rev
Log:
Incorporated the contents of the summarise.py script into the frame order 
auto-analysis module.

This has been converted into the summarise() function which will generate a 
results summary table as
the analysis is still running.


Modified:
    branches/frame_order_cleanup/auto_analyses/frame_order.py

Modified: branches/frame_order_cleanup/auto_analyses/frame_order.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/auto_analyses/frame_order.py?rev=26025&r1=26024&r2=26025&view=diff
==============================================================================
--- branches/frame_order_cleanup/auto_analyses/frame_order.py   (original)
+++ branches/frame_order_cleanup/auto_analyses/frame_order.py   Thu Sep 25 
09:39:41 2014
@@ -43,6 +43,7 @@
 
 
 # Python module imports.
+from math import pi
 from numpy import float64, zeros
 from os import F_OK, access, getcwd, sep
 import sys
@@ -57,12 +58,166 @@
 from lib.io import open_write_file
 from lib.order.order_parameters import iso_cone_theta_to_S
 from lib.text.sectioning import section, subsection, title
+from lib.text.table import MULTI_COL, format_table
+from pipe_control import pipes, results
 from pipe_control.mol_res_spin import return_spin, spin_loop
-from pipe_control.pipes import get_pipe
 from pipe_control.structure.mass import pipe_centre_of_mass
 from prompt.interpreter import Interpreter
 from specific_analyses.frame_order.data import generate_pivot
 from status import Status; status = Status()
+
+
+
+def summarise(file_name='summary', dir=None, force=True):
+    """Summarise the frame order auto-analysis results.
+
+    This function can be used while a frame order analysis is running to 
summarise the results.  It will create a table of the statistics and model 
parameters for all of the optimised frame order models for which results 
files currently exist.
+
+
+    @keyword file_name:     The file to save the table into.
+    @type file_name:        str
+    @keyword dir:           The optional directory to place the file into.
+    @type dir:              None or str
+    @keyword force:         A flag which if True will cause any preexisting 
file to be overwritten.
+    @type force:            bool
+    """
+
+    # The model names and directories.
+    model_names = [
+        'Rigid',
+        'Free rotor',
+        'Rotor',
+        'Iso cone, free rotor',
+        'Iso cone, torsionless',
+        'Iso cone, torsionless (perm A)',
+        'Iso cone',
+        'Iso cone (perm A)',
+        'Pseudo ellipse, torsionless',
+        'Pseudo ellipse, torsionless (perm A)',
+        'Pseudo ellipse, torsionless (perm B)',
+        'Pseudo ellipse',
+        'Pseudo ellipse (perm A)',
+        'Pseudo ellipse (perm B)',
+        'Double rotor'
+    ]
+    model_dirs = {
+        'Rigid': 'rigid',
+        'Free rotor': 'free_rotor',
+        'Rotor': 'rotor',
+        'Iso cone, free rotor': 'iso_cone, free_rotor',
+        'Iso cone, torsionless': 'iso_cone_torsionless',
+        'Iso cone, torsionless (perm A)': 
'iso_cone_torsionless_permutation_A',
+        'Iso cone': 'iso_cone',
+        'Iso cone (perm A)': 'iso_cone_permutation_A',
+        'Pseudo ellipse, torsionless': 'pseudo-ellipse_torsionless',
+        'Pseudo ellipse, torsionless (perm A)': 
'pseudo-ellipse_torsionless_permutation_A',
+        'Pseudo ellipse, torsionless (perm B)': 
'pseudo-ellipse_torsionless_permutation_B',
+        'Pseudo ellipse': 'pseudo-ellipse',
+        'Pseudo ellipse (perm A)': 'pseudo-ellipse_permutation_A',
+        'Pseudo ellipse (perm B)': 'pseudo-ellipse_permutation_B',
+        'Double rotor': 'double_rotor'
+    }
+
+    # The analysis directory and structures.
+    contents = []
+    contents.append(["Analysis directory", getcwd()])
+    string = format_table(contents=contents)
+
+    # Table header.
+    headings1 = []
+    headings1.append(["Model", "k", "chi2", "AIC", "Motional eigenframe", 
MULTI_COL, MULTI_COL, "Order parameters (deg)", MULTI_COL, MULTI_COL, 
MULTI_COL])
+    headings1.append([None, None, None, None, "a", "b/th", "g/ph", "thx", 
"thy", "smax", "smax2"])
+
+    # 2nd table header.
+    headings2 = []
+    headings2.append(["Model", "Average position", MULTI_COL, MULTI_COL, 
MULTI_COL, MULTI_COL, MULTI_COL, "Pivot point", MULTI_COL, MULTI_COL])
+    headings2.append([None, "x", "y", "z", "a", "b", "g", "x", "y", "z"])
+
+    # Loop over the models.
+    contents1 = []
+    contents2 = []
+    for i in range(len(model_names)):
+        # No file.
+        if not access(model_dirs[model_names[i]]+'/results.bz2', F_OK):
+            continue
+
+        # Create a data pipe.
+        pipes.create(model_names[i], 'frame order')
+
+        # Load the data.
+        results.read(file='results', dir=model_dirs[model_names[i]])
+
+        # Number of params.
+        k = len(cdp.params)
+
+        # Format the model information.
+        contents1.append([model_names[i], k, cdp.chi2, cdp.chi2 + 2*k, None, 
None, None, None, None, None, None])
+        contents2.append([model_names[i], 0.0, 0.0, 0.0, None, None, None, 
None, None, None])
+
+        # Eigen alpha.
+        if hasattr(cdp, 'eigen_alpha') and cdp.eigen_alpha != None:
+            contents1[-1][4] = cdp.eigen_alpha
+
+        # Eigen beta.
+        if hasattr(cdp, 'eigen_beta') and cdp.eigen_beta != None:
+            contents1[-1][5] = cdp.eigen_beta
+        elif hasattr(cdp, 'axis_theta') and cdp.axis_theta != None:
+            contents1[-1][5] = cdp.axis_theta
+
+        # Eigen gamma.
+        if hasattr(cdp, 'eigen_gamma') and cdp.eigen_gamma != None:
+            contents1[-1][6] = cdp.eigen_gamma
+        elif hasattr(cdp, 'axis_phi') and cdp.axis_phi != None:
+            contents1[-1][6] = cdp.axis_phi
+
+        # Order x.
+        if hasattr(cdp, 'cone_theta_x') and cdp.cone_theta_x != None:
+            contents1[-1][7] = cdp.cone_theta_x / 2.0 / pi * 360.0
+        elif hasattr(cdp, 'cone_theta') and cdp.cone_theta != None:
+            contents1[-1][7] = cdp.cone_theta / 2.0 / pi * 360.0
+
+        # Order y.
+        if hasattr(cdp, 'cone_theta_y') and cdp.cone_theta_y != None:
+            contents1[-1][8] = cdp.cone_theta_y / 2.0 / pi * 360.0
+
+        # Order torsion.
+        if hasattr(cdp, 'cone_sigma_max') and cdp.cone_sigma_max != None:
+            contents1[-1][9] = cdp.cone_sigma_max / 2.0 / pi * 360.0
+
+        # Order torsion 2.
+        if hasattr(cdp, 'cone_sigma_max_2') and cdp.cone_sigma_max_2 != None:
+            contents1[-1][10] = cdp.cone_sigma_max_2 / 2.0 / pi * 360.0
+
+        # The average position parameters.
+        if hasattr(cdp, 'ave_pos_x') and cdp.ave_pos_x != None:
+            contents2[-1][1] = cdp.ave_pos_x
+        if hasattr(cdp, 'ave_pos_y') and cdp.ave_pos_y != None:
+            contents2[-1][2] = cdp.ave_pos_y
+        if hasattr(cdp, 'ave_pos_z') and cdp.ave_pos_z != None:
+            contents2[-1][3] = cdp.ave_pos_z
+        if hasattr(cdp, 'ave_pos_alpha') and cdp.ave_pos_alpha != None:
+            contents2[-1][4] = cdp.ave_pos_alpha
+        if hasattr(cdp, 'ave_pos_beta') and cdp.ave_pos_beta != None:
+            contents2[-1][5] = cdp.ave_pos_beta
+        if hasattr(cdp, 'ave_pos_gamma') and cdp.ave_pos_gamma != None:
+            contents2[-1][6] = cdp.ave_pos_gamma
+
+        # The pivot point.
+        contents2[-1][7] = cdp.pivot_x
+        contents2[-1][8] = cdp.pivot_y
+        contents2[-1][9] = cdp.pivot_z
+
+    # Add the tables.
+    string += format_table(headings=headings1, contents=contents1, 
custom_format=[None, None, "%.2f", "%.2f", "%.3f", "%.3f", "%.3f", "%.2f", 
"%.2f", "%.2f", "%.2f"])
+    string += format_table(headings=headings2, contents=contents2, 
custom_format=[None, "%.3f", "%.3f", "%.3f", "%.3f", "%.3f", "%.3f", "%.3f", 
"%.3f", "%.3f"])
+
+    # Write out.
+    sys.stdout.write("\n\n\n")
+    sys.stdout.write(string)
+    file = open_write_file(file_name=file_name, dir=dir, force=force)
+    file.write(string)
+    file.close()
+
 
 
 class Frame_order_analysis:
@@ -402,7 +557,7 @@
             print("Obtaining the average position from the rigid model.")
 
             # Get the rigid data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_RIGID])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_RIGID])
 
             # Copy the average position parameters from the rigid model.
             cdp.ave_pos_x = pipe.ave_pos_x
@@ -418,7 +573,7 @@
             print("Obtaining the average position from the free rotor 
model.")
 
             # Get the free rotor data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_FREE_ROTOR])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_FREE_ROTOR])
 
             # Copy the average position parameters from the free rotor model.
             cdp.ave_pos_x = pipe.ave_pos_x
@@ -449,7 +604,7 @@
             print("Obtaining the cone axis from the rotor model.")
 
             # Get the rotor data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_ROTOR])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_ROTOR])
 
             # The cone axis as the axis alpha angle.
             if model == MODEL_FREE_ROTOR:
@@ -465,7 +620,7 @@
             print("Obtaining the cone axis from the isotropic cone model.")
 
             # Get the iso cone data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_ISO_CONE])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_ISO_CONE])
 
             # Copy the cone axis parameters.
             cdp.axis_theta = pipe.axis_theta
@@ -477,7 +632,7 @@
             print("Obtaining the full eigenframe from the pseudo-ellipse 
model.")
 
             # Get the pseudo-ellipse data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_PSEUDO_ELLIPSE])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_PSEUDO_ELLIPSE])
 
             # Copy the three Euler angles.
             cdp.eigen_alpha = pipe.eigen_alpha
@@ -503,7 +658,7 @@
         # The cone angle from the isotropic cone model.
         if model in [MODEL_ISO_CONE_TORSIONLESS, MODEL_PSEUDO_ELLIPSE, 
MODEL_ISO_CONE_FREE_ROTOR]:
             # Get the iso cone data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_ISO_CONE])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_ISO_CONE])
 
             # Copy the cone angle directly.
             if model == MODEL_ISO_CONE_TORSIONLESS:
@@ -526,7 +681,7 @@
             print("Obtaining the cone X and Y angles from the pseudo-ellipse 
model.")
 
             # Get the pseudo-ellipse data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_PSEUDO_ELLIPSE])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_PSEUDO_ELLIPSE])
 
             # Copy the cone axis.
             cdp.cone_theta_x = pipe.cone_theta_x
@@ -539,7 +694,7 @@
             print("Obtaining the torsion angle from the rotor model.")
 
             # Get the rotor data pipe.
-            pipe = get_pipe(self.pipe_name_dict[MODEL_ROTOR])
+            pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_ROTOR])
 
             # Copy the cone axis.
             cdp.cone_sigma_max = pipe.cone_sigma_max
@@ -564,7 +719,7 @@
         print("Obtaining the pivot point from the rotor model.")
 
         # Get the iso cone data pipe.
-        pipe = get_pipe(self.pipe_name_dict[MODEL_ROTOR])
+        pipe = pipes.get_pipe(self.pipe_name_dict[MODEL_ROTOR])
 
         # Copy the pivot parameters.
         cdp.pivot_x = pipe.pivot_x




Related Messages


Powered by MHonArc, Updated Thu Sep 25 10:40:06 2014