Author: macraild
Date: Fri Apr 7 13:43:32 2006
New Revision: 2457
URL: http://svn.gna.org/viewcvs/relax?rev=2457&view=rev
Log:
Fix for bug #5698 and related issues.
Adds several missing functions to specific_fns/jw_mapping.py, and some
missing pointers to jw_mapping functions in specific_fns/specific_setup.py
Also adds jw_mapping tests to the test suite
Added:
1.2/test_suite/jw_mapping.py
Modified:
1.2/generic_fns/minimise.py
1.2/specific_fns/jw_mapping.py
1.2/specific_fns/specific_setup.py
1.2/test_suite/__init__.py
1.2/test_suite/test_suite.py
Modified: 1.2/generic_fns/minimise.py
URL:
http://svn.gna.org/viewcvs/relax/1.2/generic_fns/minimise.py?rev=2457&r1=2456&r2=2457&view=diff
==============================================================================
--- 1.2/generic_fns/minimise.py (original)
+++ 1.2/generic_fns/minimise.py Fri Apr 7 13:43:32 2006
@@ -61,6 +61,7 @@
# Minimisation.
else:
+
calculate(run=run, print_flag=print_flag)
Modified: 1.2/specific_fns/jw_mapping.py
URL:
http://svn.gna.org/viewcvs/relax/1.2/specific_fns/jw_mapping.py?rev=2457&r1=2456&r2=2457&view=diff
==============================================================================
--- 1.2/specific_fns/jw_mapping.py (original)
+++ 1.2/specific_fns/jw_mapping.py Fri Apr 7 13:43:32 2006
@@ -481,6 +481,10 @@
# Arguments.
self.run = run
+ # Skip unselected residues.
+ if not self.relax.data.res[self.run][instance].select:
+ return
+
# Return J(0) sim data.
if index == 0:
return self.relax.data.res[self.run][instance].j0_sim
@@ -492,6 +496,37 @@
# Return J(wH) sim data.
if index == 2:
return self.relax.data.res[self.run][instance].jwh_sim
+
+
+ def sim_return_selected(self, run, instance):
+ """Function for returning the array of selected simulation flags."""
+
+ # Arguments.
+ self.run = run
+
+ # Multiple instances.
+ return self.relax.data.res[self.run][instance].select_sim
+
+
+ def set_selected_sim(self, run, instance, select_sim):
+ """Function for returning the array of selected simulation flags."""
+
+ # Arguments.
+ self.run = run
+
+ # Multiple instances.
+ self.relax.data.res[self.run][instance].select_sim = select_sim
+
+
+ def sim_pack_data(self, run, i, sim_data):
+ """Function for packing Monte Carlo simulation data."""
+
+ # Test if the simulation data already exists.
+ if hasattr(self.relax.data.res[run][i], 'relax_sim_data'):
+ raise RelaxError, "Monte Carlo simulation data already exists."
+
+ # Create the data structure.
+ self.relax.data.res[run][i].relax_sim_data = sim_data
def write_columnar_line(self, file=None, num=None, name=None,
select=None, data_set=None, nucleus=None, wH=None, j0=None, jwx=None,
jwh=None, r=None, csa=None, ri_labels=None, remap_table=None,
frq_labels=None, frq=None, ri=None, ri_error=None):
Modified: 1.2/specific_fns/specific_setup.py
URL:
http://svn.gna.org/viewcvs/relax/1.2/specific_fns/specific_setup.py?rev=2457&r1=2456&r2=2457&view=diff
==============================================================================
--- 1.2/specific_fns/specific_setup.py (original)
+++ 1.2/specific_fns/specific_setup.py Fri Apr 7 13:43:32 2006
@@ -154,6 +154,10 @@
if self.eqi == 'return_data':
return self.relax.specific.jw_mapping.return_data
+ # Data or parameter name returning function.
+ if self.eqi == 'return_data_name':
+ return self.relax.specific.jw_mapping.return_data_name
+
# Data error returning function.
if self.eqi == 'return_error':
return self.relax.specific.jw_mapping.return_error
@@ -166,6 +170,10 @@
if self.eqi == 'return_sim_param':
return self.relax.specific.jw_mapping.sim_return_param
+ # Simulation parameter array returning function.
+ if self.eqi == 'return_selected_sim':
+ return self.relax.specific.jw_mapping.sim_return_selected
+
# String of the external parameter units returning function.
if self.eqi == 'return_units':
return self.relax.specific.model_free.return_units
@@ -181,6 +189,10 @@
# Set error function.
if self.eqi == 'set_error':
return self.relax.specific.jw_mapping.set_error
+
+ # Set error function.
+ if self.eqi == 'set_selected_sim':
+ return self.relax.specific.jw_mapping.set_selected_sim
# Write results function (Columnar format).
if self.eqi == 'write_columnar_results':
Modified: 1.2/test_suite/__init__.py
URL:
http://svn.gna.org/viewcvs/relax/1.2/test_suite/__init__.py?rev=2457&r1=2456&r2=2457&view=diff
==============================================================================
--- 1.2/test_suite/__init__.py (original)
+++ 1.2/test_suite/__init__.py Fri Apr 7 13:43:32 2006
@@ -24,6 +24,7 @@
__all__ = ['test_suite',
'diffusion_tensor',
'generic.py',
+ 'jw_mapping',
'model_free',
'relax_fit',
'run_create',
Added: 1.2/test_suite/jw_mapping.py
URL:
http://svn.gna.org/viewcvs/relax/1.2/test_suite/jw_mapping.py?rev=2457&view=auto
==============================================================================
--- 1.2/test_suite/jw_mapping.py (added)
+++ 1.2/test_suite/jw_mapping.py Fri Apr 7 13:43:32 2006
@@ -1,0 +1,166 @@
+###############################################################################
+#
#
+# Copyright (C) 2006 Edward d'Auvergne
#
+#
#
+# This file is part of the program relax.
#
+#
#
+# relax is free software; you can redistribute it and/or modify
#
+# it under the terms of the GNU General Public License as published by
#
+# the Free Software Foundation; either version 2 of the License, or
#
+# (at your option) any later version.
#
+#
#
+# relax is distributed in the hope that it will be useful,
#
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
#
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#
+# GNU General Public License for more details.
#
+#
#
+# You should have received a copy of the GNU General Public License
#
+# along with relax; if not, write to the Free Software
#
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
+#
#
+###############################################################################
+
+import sys
+
+
+class Jw:
+ def __init__(self, relax, test_name):
+ """Class for testing various aspects specific to reduced spectral
density mapping."""
+
+ self.relax = relax
+
+ # Results reading test.
+ if test_name == 'set':
+
+ # The name of the test.
+ self.name = "the user function value.set()"
+
+ # The test.
+ self.test = self.set_value
+
+ # Spectral density calculation test.
+ if test_name == 'calc':
+
+ # The name of the test.
+ self.name = "spectral density calculation"
+
+ # The test.
+ self.test = self.calc
+
+
+ def calc(self, run):
+ """The spectral density calculation test."""
+
+ # Arguments.
+ self.run = run
+
+ # Setup.
+ self.calc_setup()
+
+ # Try the reduced spectral density mapping.
+ self.relax.interpreter._Minimisation.calc(self.run)
+
+ # Success.
+ return self.calc_integrity()
+
+
+ def calc_integrity(self):
+
+ # Correct jw values:
+ j0 = [1.1572932929675908e-10, 1.0730217796621087e-10]
+ jwh = [1.5598167512718012e-12, 2.9480536599037041e-12]
+ jwx = [5.2475572036231835e-12, 4.6479921863578077e-12]
+
+ # Loop over residues.
+ for index,residue in enumerate(self.relax.data.res[self.run]):
+
+ # Residues -2 and -1 have data.
+ if index == 0 or index == 1:
+ if not self.relax.data.res[self.run][index].select:
+ print 'Residue',
self.relax.data.res[self.run][index].num, 'unexpectedly not selected'
+ return
+
+ if abs(self.relax.data.res[self.run][index].j0 - j0[index])
j0[index]/1e6:
+ print 'Error in residue',
self.relax.data.res[self.run][index].num, 'j0 calculated value'
+ return
+ if abs(self.relax.data.res[self.run][index].jwh -
jwh[index]) > jwh[index]/1e6:
+ print 'Error in residue',
self.relax.data.res[self.run][index].num, 'jwh calculated value'
+ return
+ if abs(self.relax.data.res[self.run][index].jwx -
jwx[index]) > jwx[index]/1e6:
+ print 'Error in residue',
self.relax.data.res[self.run][index].num, 'jwx calculated value'
+ return
+
+ # Other residues have insufficient data.
+ else:
+ if self.relax.data.res[self.run][index].select:
+ print 'Residue',
self.relax.data.res[self.run][index].num, 'unexpectedly selected'
+ return
+
+ # Success.
+ return 1
+
+
+ def calc_setup(self):
+ """Setup for the calculation test."""
+
+ dir = sys.path[-1] + '/test_suite/data/jw_mapping/'
+
+ dataPaths = [dir + 'noe.dat',
+ dir + 'R1.dat',
+ dir + 'R2.dat']
+
+ dataTypes = [('NOE', '600', 600.0e6),
+ ('R1', '600', 600.0e6),
+ ('R2', '600', 600.0e6)]
+
+ # Create the run.
+ self.relax.generic.runs.create(self.run, 'jw')
+
+ # Read the sequence.
+ self.relax.interpreter._Sequence.read(self.run, file='test_seq',
dir=sys.path[-1] + '/test_suite/data')
+
+ # Read the data.
+ for dataSet in xrange(len(dataPaths)):
+ self.relax.interpreter._Relax_data.read(self.run,
dataTypes[dataSet][0], dataTypes[dataSet][1], dataTypes[dataSet][2],
dataPaths[dataSet])
+
+ # Nuclei type.
+ self.relax.interpreter._Nuclei.nuclei('N')
+
+ # Set r and csa.
+ self.relax.interpreter._Value.set(self.run, 1.02 * 1e-10,
'bond_length')
+ self.relax.interpreter._Value.set(self.run, -170 * 1e-6, 'csa')
+
+ # Select the frequency.
+ self.relax.interpreter._Jw_mapping.set_frq(self.run, frq=600.0 * 1e6)
+
+
+ def set_value(self, run):
+ """The value.set test."""
+
+ # Arguments.
+ self.run = run
+
+ # Create the run.
+ self.relax.generic.runs.create(self.run, 'jw')
+
+ # Read the sequence.
+ self.relax.interpreter._Sequence.read(self.run, file='test_seq',
dir=sys.path[-1] + '/test_suite/data')
+
+ # Try to set the values.
+ bond_length = 1.02 * 1e-10
+ csa = -170 * 1e-6
+ self.relax.interpreter._Value.set(self.run, bond_length,
'bond_length')
+ self.relax.interpreter._Value.set(self.run, csa, 'csa')
+
+ # Test values.
+ for i in xrange( len(self.relax.data.res[self.run]) ):
+ if self.relax.data.res[self.run][i].r != bond_length:
+ print 'Value of bond_length has not been set correctly'
+ return
+ if self.relax.data.res[self.run][i].csa != csa:
+ print 'Value of csa has not been set correctly'
+ return
+
+ # Success.
+ return 1
+
Modified: 1.2/test_suite/test_suite.py
URL:
http://svn.gna.org/viewcvs/relax/1.2/test_suite/test_suite.py?rev=2457&r1=2456&r2=2457&view=diff
==============================================================================
--- 1.2/test_suite/test_suite.py (original)
+++ 1.2/test_suite/test_suite.py Fri Apr 7 13:43:32 2006
@@ -28,6 +28,7 @@
# Import the tests.
from diffusion_tensor import Diffusion_tensor
from generic import Generic
+from jw_mapping import Jw
from model_free import Mf
from relax_fit import Relax_fit
from run_create import Run_create
@@ -136,6 +137,23 @@
# Execute the tests.
self.exec_tests(self.mf_test_array)
+
+
+ # Reduced spectral density mapping tests.
+ #########################################
+
+ # Heading.
+ self.heading("The reduced spectral density mapping tests")
+
+ # Initialise the array containing each test element.
+ self.jw_test_array = []
+
+ # User function value.set() test.
+ self.jw_test_array.append(Jw(self.relax, 'set'))
+ self.jw_test_array.append(Jw(self.relax, 'calc'))
+
+ # Execute the tests.
+ self.exec_tests(self.jw_test_array)
# Generic tests.
@@ -280,6 +298,17 @@
self.summary_line(test)
+ # Reduced spectral density Mapping tests.
+ #########################################
+
+ # Heading.
+ sys.stdout.write("\nThe reduced spectral density tests:\n")
+
+ # Loop over the tests.
+ for test in self.jw_test_array:
+ self.summary_line(test)
+
+
# Generic tests.
################