mailr12757 - /branches/relax_data/generic_fns/dasha.py


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

Header


Content

Posted by edward on March 03, 2011 - 10:44:
Author: bugman
Date: Thu Mar  3 10:44:30 2011
New Revision: 12757

URL: http://svn.gna.org/viewcvs/relax?rev=12757&view=rev
Log:
Updated all of the Dasha module for the new relax data ID string design.


Modified:
    branches/relax_data/generic_fns/dasha.py

Modified: branches/relax_data/generic_fns/dasha.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/relax_data/generic_fns/dasha.py?rev=12757&r1=12756&r2=12757&view=diff
==============================================================================
--- branches/relax_data/generic_fns/dasha.py (original)
+++ branches/relax_data/generic_fns/dasha.py Thu Mar  3 10:44:30 2011
@@ -1,6 +1,6 @@
 
###############################################################################
 #                                                                            
 #
-# Copyright (C) 2005-2009 Edward d'Auvergne                                  
 #
+# Copyright (C) 2005-2011 Edward d'Auvergne                                  
 #
 #                                                                            
 #
 # This file is part of the program relax.                                    
 #
 #                                                                            
 #
@@ -30,7 +30,7 @@
 import sys
 
 # relax module imports.
-from generic_fns import angles, diffusion_tensor, pipes, value
+from generic_fns import angles, diffusion_tensor, pipes, relax_data, value
 from generic_fns.mol_res_spin import exists_mol_res_spin_data, 
first_residue_num, last_residue_num, residue_loop, spin_loop
 from relax_errors import RelaxDirError, RelaxError, RelaxFileError, 
RelaxNoPdbError, RelaxNoSequenceError, RelaxNoTensorError
 from relax_io import mkdir_nofail, open_write_file, test_binary
@@ -52,23 +52,22 @@
     # Loop over the sequence.
     for spin in spin_loop():
         # Relaxation data must exist!
-        if not hasattr(spin, 'relax_data'):
+        if not hasattr(spin, 'ri_data'):
             spin.select = False
 
         # Require 3 or more relaxation data points.
-        elif len(spin.relax_data) < 3:
+        elif len(spin.ri_data) < 3:
             spin.select = False
 
         # Require at least as many data points as params to prevent 
over-fitting.
-        elif hasattr(spin, 'params') and spin.params and len(spin.params) > 
len(spin.relax_data):
+        elif hasattr(spin, 'params') and spin.params and len(spin.params) > 
len(spin.ri_data):
             spin.select = False
 
 
 def create(algor='LM', dir=None, force=False):
     """Create the Dasha script file 'dasha_script' for controlling the 
program.
 
-    @keyword algor: The optimisation algorithm to use.  This can be the 
Levenberg-Marquardt
-                    algorithm 'LM' or the Newton-Raphson algorithm 'NR'.
+    @keyword algor: The optimisation algorithm to use.  This can be the 
Levenberg-Marquardt algorithm 'LM' or the Newton-Raphson algorithm 'NR'.
     @type algor:    str
     @keyword dir:   The optional directory to place the script into.
     @type dir:      str or None
@@ -96,7 +95,7 @@
 
     # Test the optimisation algorithm.
     if algor not in ['LM', 'NR']:
-        raise RelaxError("The Dasha optimisation algorithm " + repr(algor) + 
" is unknown, it should either be 'LM' or 'NR'.")
+        raise RelaxError("The Dasha optimisation algorithm '%s' is unknown, 
it should either be 'LM' or 'NR'." % algor)
 
     # Multiple spins per residue not allowed.
     for residue in residue_loop():
@@ -112,20 +111,6 @@
         dir = pipes.cdp_name()
     mkdir_nofail(dir, verbosity=0)
 
-    # Number of field strengths and values.
-    num_frq = 0
-    frq = []
-    for spin in spin_loop():
-        if hasattr(spin, 'num_frq'):
-            if spin.num_frq > num_frq:
-                # Number of field strengths.
-                num_frq = spin.num_frq
-
-                # Field strength values.
-                for val in spin.frq:
-                    if val not in frq:
-                        frq.append(val)
-
     # Calculate the angle alpha of the XH vector in the spheroid diffusion 
frame.
     if cdp.diff_tensor.type == 'spheroid':
         angles.spheroid_frame()
@@ -147,17 +132,16 @@
     @type file:         file object
     @param model_type:  The model-free model type.
     @type model_type:   str
-    @param algor:       The optimisation algorithm to use.  This can be the 
Levenberg-Marquardt
-                        algorithm 'LM' or the Newton-Raphson algorithm 'NR'.
+    @param algor:       The optimisation algorithm to use.  This can be the 
Levenberg-Marquardt algorithm 'LM' or the Newton-Raphson algorithm 'NR'.
     @type algor:        str
     """
 
     # Delete all data.
-    file.write('# Delete all data.\n')
-    file.write('del 1 10000\n')
+    file.write("# Delete all data.\n")
+    file.write("del 1 10000\n")
 
     # Nucleus type.
-    file.write('\n# Nucleus type.\n')
+    file.write("\n# Nucleus type.\n")
     nucleus = None
     for spin in spin_loop():
         # Can only handle one spin type.
@@ -174,31 +158,30 @@
     elif nucleus == '13C':
         nucleus = 'C13'
     else:
-        raise RelaxError('Cannot handle the nucleus type ' + repr(nucleus) + 
' within Dasha.')
-    file.write('set nucl ' + nucleus + '\n')
+        raise RelaxError("Cannot handle the nucleus type '%s' within Dasha." 
% nucleus)
+    file.write("set nucl %s\n" % nucleus)
 
     # Number of frequencies.
-    file.write('\n# Number of frequencies.\n')
-    file.write('set n_freq ' + repr(cdp.num_frq) + '\n')
+    file.write("\n# Number of frequencies.\n")
+    file.write("set n_freq %s\n" % relax_data.num_frq())
 
     # Frequency values.
-    file.write('\n# Frequency values.\n')
-    frqs = []
-    for ri_id in cdp.ri_ids:
-        if not cdp.frq[ri_id] in frqs:
-            frqs.append(cdp.frq[ri_id])
-            file.write('set H1_freq ' + repr(cdp.frq[ri_id] / 1e6) + ' ' + 
repr(i+1) + '\n')
+    file.write("\n# Frequency values.\n")
+    count = 1
+    for frq in relax_data.frq_loop():
+        file.write("set H1_freq %s %s\n" % (frq / 1e6, count))
+        count += 1
 
     # Set the diffusion tensor.
-    file.write('\n# Set the diffusion tensor.\n')
+    file.write("\n# Set the diffusion tensor.\n")
     if model_type != 'local_tm':
         # Sphere.
         if cdp.diff_tensor.type == 'sphere':
-            file.write('set tr ' + repr(cdp.diff_tensor.tm / 1e-9) + '\n')
+            file.write("set tr %s\n" % (cdp.diff_tensor.tm / 1e-9))
 
         # Spheroid.
         elif cdp.diff_tensor.type == 'spheroid':
-            file.write('set tr ' + repr(cdp.diff_tensor.tm / 1e-9) + '\n')
+            file.write('set tr %s\n' % (cdp.diff_tensor.tm / 1e-9))
 
         # Ellipsoid.
         elif cdp.diff_tensor.type == 'ellipsoid':
@@ -206,24 +189,24 @@
             Dx, Dy, Dz = diffusion_tensor.return_eigenvalues()
 
             # Geometric parameters.
-            file.write('set tr ' + repr(cdp.diff_tensor.tm / 1e-9) + '\n')
-            file.write('set D1/D3 ' + repr(Dx / Dz) + '\n')
-            file.write('set D2/D3 ' + repr(Dy / Dz) + '\n')
+            file.write("set tr %s\n" % (cdp.diff_tensor.tm / 1e-9))
+            file.write("set D1/D3 %s\n" % (Dx / Dz))
+            file.write("set D2/D3 %s\n" % (Dy / Dz))
 
             # Orientational parameters.
-            file.write('set alfa ' + repr(cdp.diff_tensor.alpha / (2.0 * pi) 
* 360.0) + '\n')
-            file.write('set betta ' + repr(cdp.diff_tensor.beta / (2.0 * pi) 
* 360.0) + '\n')
-            file.write('set gamma ' + repr(cdp.diff_tensor.gamma / (2.0 * 
pi) * 360.0) + '\n')
+            file.write("set alfa %s\n" % (cdp.diff_tensor.alpha / (2.0 * pi) 
* 360.0))
+            file.write("set betta %s\n" % (cdp.diff_tensor.beta / (2.0 * pi) 
* 360.0))
+            file.write("set gamma %s\n" % (cdp.diff_tensor.gamma / (2.0 * 
pi) * 360.0))
 
     # Reading the relaxation data.
-    file.write('\n# Reading the relaxation data.\n')
-    file.write('echo Reading the relaxation data.\n')
+    file.write("\n# Reading the relaxation data.\n")
+    file.write("echo Reading the relaxation data.\n")
     noe_index = 1
     r1_index = 1
     r2_index = 1
-    for i in xrange(cdp.num_ri):
+    for ri_id in cdp.ri_ids:
         # NOE.
-        if cdp.ri_labels[i] == 'NOE':
+        if cdp.ri_type[ri_id] == 'NOE':
             # Data set number.
             number = noe_index
 
@@ -234,7 +217,7 @@
             noe_index = noe_index + 1
 
         # R1.
-        elif cdp.ri_labels[i] == 'R1':
+        elif cdp.ri_type[ri_id] == 'R1':
             # Data set number.
             number = r1_index
 
@@ -245,7 +228,7 @@
             r1_index = r1_index + 1
 
         # R2.
-        elif cdp.ri_labels[i] == 'R2':
+        elif cdp.ri_type[ri_id] == 'R2':
             # Data set number.
             number = r2_index
 
@@ -257,9 +240,9 @@
 
         # Set the data type.
         if number == 1:
-            file.write('\nread < ' + data_type + '\n')
+            file.write("\nread < %s\n" % data_type)
         else:
-            file.write('\nread < ' + data_type + ' ' + repr(number) + '\n')
+            file.write("\nread < %s %s\n" % (data_type, number))
 
         # The relaxation data.
         for residue in residue_loop():
@@ -271,15 +254,15 @@
                 continue
 
             # Skip and deselect spins for which relaxation data is missing.
-            if len(spin.relax_data) != cdp.num_ri:
+            if len(spin.ri_data) != len(cdp.ri_ids):
                 spin.select = False
                 continue
 
             # Data and errors.
-            file.write(repr(residue.num) + ' ' + repr(spin.relax_data[i]) + 
' ' + repr(spin.relax_error[i]) + '\n')
+            file.write("%s %s %s\n" % (residue.num, spin.ri_data[ri_id], 
spin.ri_data_err[ri_id]))
 
         # Terminate the reading.
-        file.write('exit\n')
+        file.write("exit\n")
 
     # Individual residue optimisation.
     if model_type == 'mf':
@@ -293,24 +276,24 @@
                 continue
 
             # Comment.
-            file.write('\n\n\n# Residue ' + repr(residue.num) + '\n\n')
+            file.write("\n\n\n# Residue %s\n\n" % residue.num)
 
             # Echo.
-            file.write('echo Optimisation of residue ' + repr(residue.num) + 
'\n')
+            file.write("echo Optimisation of residue %s\n" % residue.num)
 
             # Select the spin.
-            file.write('\n# Select the residue.\n')
-            file.write('set cres ' + repr(residue.num) + '\n')
+            file.write("\n# Select the residue.\n")
+            file.write("set cres %s\n" % residue.num)
 
             # The angle alpha of the XH vector in the spheroid diffusion 
frame.
             if cdp.diff_tensor.type == 'spheroid':
-                file.write('set teta ' + repr(spin.alpha) + '\n')
+                file.write("set teta %s\n" % spin.alpha)
 
             # The angles theta and phi of the XH vector in the ellipsoid 
diffusion frame.
             elif cdp.diff_tensor.type == 'ellipsoid':
-                file.write('\n# Setting the spherical angles of the XH 
vector in the ellipsoid diffusion frame.\n')
-                file.write('set teta ' + repr(spin.theta) + '\n')
-                file.write('set fi ' + repr(spin.phi) + '\n')
+                file.write("\n# Setting the spherical angles of the XH 
vector in the ellipsoid diffusion frame.\n")
+                file.write("set teta %s\n" % spin.theta)
+                file.write("set fi %s\n" % spin.phi)
 
             # The 'jmode'.
             if 'ts' in spin.params:
@@ -339,58 +322,58 @@
                 sym = False
 
             # Set the jmode.
-            file.write('\n# Set the jmode.\n')
-            file.write('set def jmode ' + repr(jmode))
+            file.write("\n# Set the jmode.\n")
+            file.write("set def jmode %s" % jmode)
             if exch:
-                file.write(' exch')
+                file.write(" exch")
             if anis:
-                file.write(' anis')
+                file.write(" anis")
             if sym:
-                file.write(' sym')
-            file.write('\n')
+                file.write(" sym")
+            file.write("\n")
 
             # Parameter default values.
-            file.write('\n# Parameter default values.\n')
-            file.write('reset jmode ' + repr(residue.num) + '\n')
+            file.write("\n# Parameter default values.\n")
+            file.write("reset jmode %s\n" % residue.num)
 
             # Bond length.
-            file.write('\n# Bond length.\n')
-            file.write('set r_hx ' + repr(spin.r / 1e-10) + '\n')
+            file.write("\n# Bond length.\n")
+            file.write("set r_hx %s\n" % (spin.r / 1e-10))
 
             # CSA value.
-            file.write('\n# CSA value.\n')
-            file.write('set csa ' + repr(spin.csa / 1e-6) + '\n')
+            file.write("\n# CSA value.\n")
+            file.write("set csa %s\n" % (spin.csa / 1e-6))
 
             # Fix the tf parameter if it isn't in the model.
             if not 'tf' in spin.params and jmode == 3:
-                file.write('\n# Fix the tf parameter.\n')
-                file.write('fix tf 0\n')
+                file.write("\n# Fix the tf parameter.\n")
+                file.write("fix tf 0\n")
 
         # Optimisation of all residues.
-        file.write('\n\n\n# Optimisation of all residues.\n')
+        file.write("\n\n\n# Optimisation of all residues.\n")
         if algor == 'LM':
-            file.write('lmin ' + repr(first_residue_num()) + ' ' + 
repr(last_residue_num()))
+            file.write("lmin %s %s" % (first_residue_num(), 
last_residue_num()))
         elif algor == 'NR':
-            file.write('min ' + repr(first_residue_num()) + ' ' + 
repr(last_residue_num()))
+            file.write("min %s %s" % (first_residue_num(), 
last_residue_num()))
 
         # Show the results.
-        file.write('\n# Show the results.\n')
-        file.write('echo\n')
-        file.write('show all\n')
+        file.write("\n# Show the results.\n")
+        file.write("echo\n")
+        file.write("show all\n")
 
         # Write the results.
-        file.write('\n# Write the results.\n')
-        file.write('write S2.out S\n')
-        file.write('write S2f.out Sf\n')
-        file.write('write S2s.out Ss\n')
-        file.write('write te.out te\n')
-        file.write('write tf.out tf\n')
-        file.write('write ts.out ts\n')
-        file.write('write Rex.out rex\n')
-        file.write('write chi2.out F\n')
+        file.write("\n# Write the results.\n")
+        file.write("write S2.out S\n")
+        file.write("write S2f.out Sf\n")
+        file.write("write S2s.out Ss\n")
+        file.write("write te.out te\n")
+        file.write("write tf.out tf\n")
+        file.write("write ts.out ts\n")
+        file.write("write Rex.out rex\n")
+        file.write("write chi2.out F\n")
 
     else:
-        raise RelaxError('Optimisation of the parameter set ' + 
repr(model_type) + ' currently not supported.')
+        raise RelaxError("Optimisation of the parameter set '%s' currently 
not supported." % model_type)
 
 
 def execute(dir, force, binary):
@@ -398,8 +381,7 @@
 
     @param dir:     The optional directory where the script is located.
     @type dir:      str or None
-    @param force:   A flag which if True will cause any pre-existing files 
to be overwritten by
-                    Dasha.
+    @param force:   A flag which if True will cause any pre-existing files 
to be overwritten by Dasha.
     @type force:    bool
     @param binary:  The name of the Dasha binary file.  This can include the 
path to the binary.
     @type binary:   str
@@ -457,7 +439,7 @@
     chdir(orig_dir)
 
     # Print some blank lines (aesthetics)
-    sys.stdout.write('\n\n')
+    sys.stdout.write("\n\n")
 
 
 def extract(dir):




Related Messages


Powered by MHonArc, Updated Thu Mar 03 11:20:01 2011