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. ################