mailr10680 - /1.3/auto_analyses/relax_fit.py


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

Header


Content

Posted by edward on February 06, 2010 - 02:16:
Author: bugman
Date: Sat Feb  6 02:16:35 2010
New Revision: 10680

URL: http://svn.gna.org/viewcvs/relax?rev=10680&view=rev
Log:
Created the module for the automatic relaxation curve fitting protocol.

This should better help define the API interface between the UIs and the 
core, allowing all UIs to
benefit from advances in this code base.


Added:
    1.3/auto_analyses/relax_fit.py
      - copied, changed from r10673, 1.3/sample_scripts/relax_fit.py

Copied: 1.3/auto_analyses/relax_fit.py (from r10673, 
1.3/sample_scripts/relax_fit.py)
URL: 
http://svn.gna.org/viewcvs/relax/1.3/auto_analyses/relax_fit.py?p2=1.3/auto_analyses/relax_fit.py&p1=1.3/sample_scripts/relax_fit.py&r1=10673&r2=10680&rev=10680&view=diff
==============================================================================
--- 1.3/sample_scripts/relax_fit.py (original)
+++ 1.3/auto_analyses/relax_fit.py Sat Feb  6 02:16:35 2010
@@ -1,6 +1,6 @@
 
###############################################################################
 #                                                                            
 #
-# Copyright (C) 2004-2008 Edward d'Auvergne                                  
 #
+# Copyright (C) 2004-2010 Edward d'Auvergne                                  
 #
 #                                                                            
 #
 # This file is part of the program relax.                                    
 #
 #                                                                            
 #
@@ -20,100 +20,131 @@
 #                                                                            
 #
 
###############################################################################
 
-# Script for relaxation curve fitting.
-######################################
+# Module docstring.
+"""The automatic relaxation curve fitting protocol."""
 
 
-# Create the 'rx' data pipe.
-pipe.create('rx', 'relax_fit')
 
-# Load the backbone amide 15N spins from a PDB file.
-structure.read_pdb('Ap4Aase_new_3.pdb')
-structure.load_spins(spin_id='@N')
+class Relax_fit:
+    def __init__(self, pipe_name='rx', seq_args=None, file_names=None, 
relax_times=None, int_method='height', mc_num=500):
+        """Perform relaxation curve fitting.
 
-# Spectrum names.
-names = [
-    'T2_ncyc1_ave',
-    'T2_ncyc1b_ave',
-    'T2_ncyc2_ave',
-    'T2_ncyc4_ave',
-    'T2_ncyc4b_ave',
-    'T2_ncyc6_ave',
-    'T2_ncyc9_ave',
-    'T2_ncyc9b_ave',
-    'T2_ncyc11_ave',
-    'T2_ncyc11b_ave'
-]
+        @keyword pipe_name:     The name of the data pipe to create.
+        @type pipe_name:        str
+        @keyword seq_args:      The sequence data (file name, dir, 
mol_name_col, res_num_col, res_name_col, spin_num_col, spin_name_col, sep).  
These are the arguments to the  sequence.read() user function, for more 
information please see the documentation for that function.
+        @type seq_args:         list of lists of [str, None or str, None or 
int, None or int, None or int, None or int, None or int, None or int, None or 
int, None or str]
+        @keyword file_names:    A list of all the peak list file names.
+        @type file_names:       list of str
+        @keyword relax_times:   The list of relaxation times corresponding 
to file_names.  These two lists must be of the same size.
+        @type relax_times:      list of float
+        @keyword int_method:    The integration method, one of 'height', 
'point sum' or 'other'.
+        @type int_method:       str
+        @keyword mc_num:        The number of Monte Carlo simulations to be 
used for error analysis at the end of the analysis.
+        @type mc_num:           int
+        """
 
-# Relaxation times (in seconds).
-times = [
-    0.0176,
-    0.0176,
-    0.0352,
-    0.0704,
-    0.0704,
-    0.1056,
-    0.1584,
-    0.1584,
-    0.1936,
-    0.1936
-]
+        # Store the args.
+        self.pipe_name = pipe_name
+        self.seq_args = seq_args
+        self.file_names = file_names
+        self.relax_times = relax_times
+        self.int_method = int_method
+        self.mc_num = mc_num
 
-# Loop over the spectra.
-for i in xrange(len(names)):
-    # Load the peak intensities.
-    spectrum.read_intensities(file=names[i]+'.list', dir=data_path, 
spectrum_id=names[i], int_method='height')
+        # User variable checks.
+        self.check_vars()
 
-    # Set the relaxation times.
-    relax_fit.relax_time(time=times[i], spectrum_id=names[i])
+        # Load the interpreter.
+        self.interpreter = Interpreter(show_script=False, quit=False, 
raise_relax_error=True)
+        self.interpreter.populate_self()
+        self.interpreter.on(verbose=False)
 
-# Specify the duplicated spectra.
-spectrum.replicated(spectrum_ids=['T2_ncyc1_ave', 'T2_ncyc1b_ave'])
-spectrum.replicated(spectrum_ids=['T2_ncyc4_ave', 'T2_ncyc4b_ave'])
-spectrum.replicated(spectrum_ids=['T2_ncyc9_ave', 'T2_ncyc9b_ave'])
-spectrum.replicated(spectrum_ids=['T2_ncyc11_ave', 'T2_ncyc11b_ave'])
+        # Execute.
+        self.run()
 
-# Peak intensity error analysis.
-spectrum.error_analysis()
 
-# Deselect unresolved spins.
-deselect.read(file='unresolved')
+    def run(self):
+        """Set up and run the curve-fitting."""
 
-# Set the relaxation curve type.
-relax_fit.select_model('exp')
+        # Create the data pipe.
+        self.interpreter.pipe.create(pipe_name, 'relax_fit')
 
-# Grid search.
-grid_search(inc=11)
+        # Load the sequence.
+        self.interpreter.sequence.read(file=self.seq_args[0], 
dir=self.seq_args[1], mol_name_col=self.seq_args[2], 
res_num_col=self.seq_args[3], res_name_col=self.seq_args[4], 
spin_num_col=self.seq_args[5], spin_name_col=self.seq_args[6], 
sep=self.seq_args[7])
 
-# Minimise.
-minimise('simplex', scaling=False, constraints=False)
+        # Loop over the spectra.
+        for i in xrange(len(self.file_names)):
+            # Load the peak intensities.
+            
self.interpreter.spectrum.read_intensities(file=self.file_names[i], 
spectrum_id=self.file_names[i], int_method=self.int_method)
 
-# Monte Carlo simulations.
-monte_carlo.setup(number=500)
-monte_carlo.create_data()
-monte_carlo.initial_values()
-minimise('simplex', scaling=False, constraints=False)
-monte_carlo.error_analysis()
+            # Set the relaxation times.
+            self.interpreter.relax_fit.relax_time(time=self.relax_times[i], 
spectrum_id=self.file_names[i])
 
-# Save the relaxation rates.
-value.write(param='rx', file='rx.out', force=True)
+        # Specify the duplicated spectra.
+        for i in range(len(self.file_names)):
+            for j in range(i+1, len(self.file_names)):
+                # Relax times match, so this is a replicate.
+                if self.relax_times[i] == self.relax_times[j]:
+                    
self.interpreter.spectrum.replicated(spectrum_ids=[self.file_names[i], 
self.file_names[i]])
 
-# Save the results.
-results.write(file='results', force=True)
+        # Peak intensity error analysis.
+        self.interpreter.spectrum.error_analysis()
 
-# Create Grace plots of the data.
-grace.write(y_data_type='chi2', file='chi2.agr', force=True)    # Minimised 
chi-squared value.
-grace.write(y_data_type='i0', file='i0.agr', force=True)    # Initial peak 
intensity.
-grace.write(y_data_type='rx', file='rx.agr', force=True)    # Relaxation 
rate.
-grace.write(x_data_type='relax_times', y_data_type='int', 
file='intensities.agr', force=True)    # Average peak intensities.
-grace.write(x_data_type='relax_times', y_data_type='int', norm=True, 
file='intensities_norm.agr', force=True)    # Average peak intensities 
(normalised).
+        # Deselect unresolved spins.
+        self.interpreter.deselect.read(file='unresolved')
 
-# Display the Grace plots.
-grace.view(file='chi2.agr')
-grace.view(file='i0.agr')
-grace.view(file='rx.agr')
-grace.view(file='intensities.agr')
-grace.view(file='intensities_norm.agr')
+        # Set the relaxation curve type.
+        self.interpreter.relax_fit.select_model('exp')
 
-# Save the program state.
-state.save('rx.save', force=True)
+        # Grid search.
+        self.interpreter.grid_search(inc=11)
+
+        # Minimise.
+        self.interpreter.minimise('simplex', scaling=False, 
constraints=False)
+
+        # Monte Carlo simulations.
+        self.interpreter.monte_carlo.setup(number=self.mc_num)
+        self.interpreter.monte_carlo.create_data()
+        self.interpreter.monte_carlo.initial_values()
+        self.interpreter.minimise('simplex', scaling=False, 
constraints=False)
+        self.interpreter.monte_carlo.error_analysis()
+
+        # Save the relaxation rates.
+        self.interpreter.value.write(param='rx', file='rx.out', force=True)
+
+        # Save the results.
+        self.interpreter.results.write(file='results', force=True)
+
+        # Create Grace plots of the data.
+        self.interpreter.grace.write(y_data_type='chi2', file='chi2.agr', 
force=True)    # Minimised chi-squared value.
+        self.interpreter.grace.write(y_data_type='i0', file='i0.agr', 
force=True)    # Initial peak intensity.
+        self.interpreter.grace.write(y_data_type='rx', file='rx.agr', 
force=True)    # Relaxation rate.
+        self.interpreter.grace.write(x_data_type='relax_times', 
y_data_type='int', file='intensities.agr', force=True)    # Average peak 
intensities.
+        self.interpreter.grace.write(x_data_type='relax_times', 
y_data_type='int', norm=True, file='intensities_norm.agr', force=True)    # 
Average peak intensities (normalised).
+
+        # Display the Grace plots.
+        self.interpreter.grace.view(file='chi2.agr')
+        self.interpreter.grace.view(file='i0.agr')
+        self.interpreter.grace.view(file='rx.agr')
+        self.interpreter.grace.view(file='intensities.agr')
+        self.interpreter.grace.view(file='intensities_norm.agr')
+
+        # Save the program state.
+        self.interpreter.state.save('rx.save', force=True)
+
+
+    def check_vars(self):
+        """Check that the user has set the variables correctly."""
+
+        # Sequence data.
+        if not isinstance(self.seq_args, list):
+            raise RelaxError("The seq_args user variable '%s' must be a 
list." % self.seq_args)
+        if len(self.seq_args) != 8:
+            raise RelaxError("The seq_args user variable '%s' must be a list 
with eight elements." % self.seq_args)
+        if not isinstance(self.seq_args[0], str):
+            raise RelaxError("The file name component of the seq_args user 
variable '%s' must be a string." % self.seq_args)
+        for i in range(1, 8):
+            if self.seq_args[i] != None and not isinstance(self.seq_args[i], 
int):
+                raise RelaxError("The column components of the seq_args user 
variable '%s' must be either None or integers." % self.seq_args)
+
+




Related Messages


Powered by MHonArc, Updated Sat Feb 06 02:40:03 2010