Author: macraild Date: Fri Apr 7 17:30:12 2006 New Revision: 2458 URL: http://svn.gna.org/viewcvs/relax?rev=2458&view=rev Log: Reorganisation of code introduced at r2450 for consistency Following the suggestion of Edward dAuvergne on relax-devel https://mail.gna.org/public/relax-devel/2006-04/msg00005.html the code introduced at r2450 has been reorganised into specific functions for the various run types Modified: 1.2/generic_fns/minimise.py 1.2/specific_fns/jw_mapping.py 1.2/specific_fns/model_free.py 1.2/specific_fns/noe.py 1.2/specific_fns/relax_fit.py 1.2/specific_fns/specific_setup.py Modified: 1.2/generic_fns/minimise.py URL: http://svn.gna.org/viewcvs/relax/1.2/generic_fns/minimise.py?rev=2458&r1=2457&r2=2458&view=diff ============================================================================== --- 1.2/generic_fns/minimise.py (original) +++ 1.2/generic_fns/minimise.py Fri Apr 7 17:30:12 2006 @@ -45,11 +45,12 @@ # Function type. function_type = self.relax.data.run_types[self.relax.data.run_names.index(run)] - # Deselect residues lacking data: - self.overfit_deselect(run, function_type) - # Specific calculate function setup. calculate = self.relax.specific_setup.setup('calculate', function_type) + overfit_deselect = self.relax.specific_setup.setup('overfit_deselect', function_type) + + # Deselect residues lacking data: + overfit_deselect(run) # Monte Carlo simulation calculation. if hasattr(self.relax.data, 'sim_state') and self.relax.data.sim_state.has_key(run) and self.relax.data.sim_state[run] == 1: @@ -75,11 +76,12 @@ # Function type. function_type = self.relax.data.run_types[self.relax.data.run_names.index(run)] - # Deselect residues lacking data: - self.overfit_deselect(run, function_type) - # Specific grid search function. grid_search = self.relax.specific_setup.setup('grid_search', function_type) + overfit_deselect = self.relax.specific_setup.setup('overfit_deselect', function_type) + + # Deselect residues lacking data: + overfit_deselect(run) # Monte Carlo simulation grid search. if hasattr(self.relax.data, 'sim_state') and self.relax.data.sim_state.has_key(run) and self.relax.data.sim_state[run] == 1: @@ -104,11 +106,12 @@ # Function type. function_type = self.relax.data.run_types[self.relax.data.run_names.index(run)] - # Deselect residues lacking data: - self.overfit_deselect(run, function_type) - # Specific minimisation function. minimise = self.relax.specific_setup.setup('minimise', function_type) + overfit_deselect = self.relax.specific_setup.setup('overfit_deselect', function_type) + + # Deselect residues lacking data: + overfit_deselect(run) # Single Monte Carlo simulation. if sim_index != None: @@ -134,63 +137,6 @@ # Standard minimisation. else: minimise(run=run, min_algor=min_algor, min_options=min_options, func_tol=func_tol, grad_tol=grad_tol, max_iterations=max_iterations, constraints=constraints, scaling=scaling, print_flag=print_flag) - - - def overfit_deselect(self, run, run_type): - """Function for deselecting residues without sufficient data to support minimisation""" - - # Loop over residue data: - for residue in self.relax.data.res[run]: - - # Skip unselected data: - if not residue.select: - continue - - # Check for sufficient data for mf - if run_type == 'mf': - if not hasattr(residue, 'relax_data'): - residue.select = 0 - continue - - # Require 3 or more data points - if len(residue.relax_data) < 3: - residue.select = 0 - continue - - # Require at least as many data points as params to prevent under-fitting - if hasattr(residue, 'params'): - if len(residue.params) > len(residue.relax_data): - residue.select = 0 - continue - - # Test for structural data if required - if hasattr(self.relax.data, 'diff') and self.relax.data.diff.has_key(run): - if self.relax.data.diff[run].type == 'spheroid' or self.relax.data.diff[run].type == 'ellipsoid': - if not hasattr(residue, 'xh_vect'): - residue.select = 0 - continue - - # Check for sufficient data for jw - if run_type == 'jw': - if not hasattr(residue, 'relax_data'): - residue.select = 0 - continue - - # Require 3 or more data points - if len(residue.relax_data) < 3: - residue.select = 0 - continue - - # Check for sufficient data for relax_fit run_type - elif run_type == 'relax_fit': - if not hasattr(residue, 'intensities'): - residue.select = 0 - continue - - # Require 3 or more data points - if len(residue.intensities) < 3: - residue.select = 0 - continue def reset_min_stats(self, run, index=None): Modified: 1.2/specific_fns/jw_mapping.py URL: http://svn.gna.org/viewcvs/relax/1.2/specific_fns/jw_mapping.py?rev=2458&r1=2457&r2=2458&view=diff ============================================================================== --- 1.2/specific_fns/jw_mapping.py (original) +++ 1.2/specific_fns/jw_mapping.py Fri Apr 7 17:30:12 2006 @@ -237,6 +237,27 @@ return len(self.relax.data.res[self.run]) + def overfit_deselect(self, run): + """Function for deselecting residues without sufficient data to support calculation""" + + # Test the sequence data exists: + if not self.relax.data.res.has_key(run): + raise RelaxNoSequenceError, run + + # Loop over residue data: + for residue in self.relax.data.res[run]: + + # Check for sufficient data + if not hasattr(residue, 'relax_data'): + residue.select = 0 + continue + + # Require 3 or more data points + if len(residue.relax_data) < 3: + residue.select = 0 + continue + + def return_conversion_factor(self, stat_type): """Dummy function for returning 1.0.""" Modified: 1.2/specific_fns/model_free.py URL: http://svn.gna.org/viewcvs/relax/1.2/specific_fns/model_free.py?rev=2458&r1=2457&r2=2458&view=diff ============================================================================== --- 1.2/specific_fns/model_free.py (original) +++ 1.2/specific_fns/model_free.py Fri Apr 7 17:30:12 2006 @@ -2620,6 +2620,44 @@ return ["InitAll yes"] + def overfit_deselect(self, run): + """Function for deselecting residues without sufficient data to support minimisation""" + + # Test sequence data exists. + if not self.relax.data.res.has_key(run): + raise RelaxNoSequenceError, run + + # Loop over residue data: + for residue in self.relax.data.res[run]: + + # Skip unselected data: + if not residue.select: + continue + + # Check for data structure. + if not hasattr(residue, 'relax_data'): + residue.select = 0 + continue + + # Require 3 or more data points + if len(residue.relax_data) < 3: + residue.select = 0 + continue + + # Require at least as many data points as params to prevent under-fitting + if hasattr(residue, 'params'): + if len(residue.params) > len(residue.relax_data): + residue.select = 0 + continue + + # Test for structural data if required + if hasattr(self.relax.data, 'diff') and self.relax.data.diff.has_key(run): + if self.relax.data.diff[run].type == 'spheroid' or self.relax.data.diff[run].type == 'ellipsoid': + if not hasattr(residue, 'xh_vect'): + residue.select = 0 + continue + + def read_columnar_col_numbers(self, header): """Function for sorting the column numbers from the columnar formatted results file.""" Modified: 1.2/specific_fns/noe.py URL: http://svn.gna.org/viewcvs/relax/1.2/specific_fns/noe.py?rev=2458&r1=2457&r2=2458&view=diff ============================================================================== --- 1.2/specific_fns/noe.py (original) +++ 1.2/specific_fns/noe.py Fri Apr 7 17:30:12 2006 @@ -58,10 +58,6 @@ if not self.run in self.relax.data.run_names: raise RelaxNoRunError, self.run - # Test if sequence data is loaded. - if not self.relax.data.res.has_key(self.run): - raise RelaxNoSequenceError, self.run - # Loop over the sequence. for i in xrange(len(self.relax.data.res[self.run])): # Remap the data structure 'self.relax.data.res[self.run][i]'. @@ -71,15 +67,27 @@ if not data.select: continue - # Skip residues which have no intensity values or errors. - if not (hasattr(data, 'ref') and hasattr(data, 'sat') and hasattr(data, 'ref_err') and hasattr(data, 'sat_err')): - continue - # Calculate the NOE. data.noe = data.sat / data.ref # Calculate the error. data.noe_err = sqrt((data.sat_err * data.ref)**2 + (data.ref_err * data.sat)**2) / data.ref**2 + + + def overfit_deselect(self, run): + """Function for deselecting residues without sufficient data to support calculation""" + + # Test the sequence data exists: + if not self.relax.data.res.has_key(run): + raise RelaxNoSequenceError, run + + # Loop over residue data: + for residue in self.relax.data.res[run]: + + # Check for sufficient data. + if not (hasattr(residue, 'ref') and hasattr(residue, 'sat') and hasattr(residue, 'ref_err') and hasattr(residue, 'sat_err')): + residue.select = 0 + continue def read(self, run=None, file=None, dir=None, spectrum_type=None, format=None, heteronuc=None, proton=None, int_col=None): Modified: 1.2/specific_fns/relax_fit.py URL: http://svn.gna.org/viewcvs/relax/1.2/specific_fns/relax_fit.py?rev=2458&r1=2457&r2=2458&view=diff ============================================================================== --- 1.2/specific_fns/relax_fit.py (original) +++ 1.2/specific_fns/relax_fit.py Fri Apr 7 17:30:12 2006 @@ -825,6 +825,27 @@ return len(self.relax.data.res[self.run]) + def overfit_deselect(self, run): + """Function for deselecting residues without sufficient data to support minimisation""" + + # Test the sequence data exists: + if not self.relax.data.res.has_key(run): + raise RelaxNoSequenceError, run + + # Loop over residue data: + for residue in self.relax.data.res[run]: + + # Check for sufficient data + if not hasattr(residue, 'intensities'): + residue.select = 0 + continue + + # Require 3 or more data points + if len(residue.intensities) < 3: + residue.select = 0 + continue + + def read(self, run=None, file=None, dir=None, relax_time=0.0, format=None, heteronuc=None, proton=None, int_col=None): """Function for reading peak intensity data.""" Modified: 1.2/specific_fns/specific_setup.py URL: http://svn.gna.org/viewcvs/relax/1.2/specific_fns/specific_setup.py?rev=2458&r1=2457&r2=2458&view=diff ============================================================================== --- 1.2/specific_fns/specific_setup.py (original) +++ 1.2/specific_fns/specific_setup.py Fri Apr 7 17:30:12 2006 @@ -146,6 +146,10 @@ if self.eqi == 'num_instances': return self.relax.specific.jw_mapping.num_instances + # Overfit deselect. + if self.eqi == 'overfit_deselect': + return self.relax.specific.jw_mapping.overfit_deselect + # Pack Monte Carlo simulation data function. if self.eqi == 'pack_sim_data': return self.relax.specific.jw_mapping.sim_pack_data @@ -254,6 +258,10 @@ if self.eqi == 'num_instances': return self.relax.specific.model_free.num_instances + # Overfit deselect. + if self.eqi == 'overfit_deselect': + return self.relax.specific.model_free.overfit_deselect + # Pack Monte Carlo simulation data function. if self.eqi == 'pack_sim_data': return self.relax.specific.model_free.sim_pack_data @@ -350,6 +358,10 @@ if self.eqi == 'calculate': return self.relax.specific.noe.calculate + # Overfit deselect. + if self.eqi == 'overfit_deselect': + return self.relax.specific.noe.overfit_deselect + # Read results file function (Columnar format). if self.eqi == 'read_columnar_results': return self.relax.specific.noe.read_columnar_results @@ -397,6 +409,10 @@ # Number of instances. if self.eqi == 'num_instances': return self.relax.specific.relax_fit.num_instances + + # Overfit deselect. + if self.eqi == 'overfit_deselect': + return self.relax.specific.relax_fit.overfit_deselect # Pack Monte Carlo simulation data function. if self.eqi == 'pack_sim_data':