Author: bugman Date: Sat Jul 5 16:01:52 2008 New Revision: 6749 URL: http://svn.gna.org/viewcvs/relax?rev=6749&view=rev Log: Converted the fix() function to the new design. Modified: 1.3/generic_fns/fix.py Modified: 1.3/generic_fns/fix.py URL: http://svn.gna.org/viewcvs/relax/1.3/generic_fns/fix.py?rev=6749&r1=6748&r2=6749&view=diff ============================================================================== --- 1.3/generic_fns/fix.py (original) +++ 1.3/generic_fns/fix.py Sat Jul 5 16:01:52 2008 @@ -31,52 +31,48 @@ from relax_errors import RelaxError, RelaxNoPipeError, RelaxNoSequenceError, RelaxNoTensorError -def fix(self, run, element, fixed): - """Function for fixing or allowing parameter values to change.""" +def fix(element, fixed): + """Fix or allow certain model components values to vary during optimisation. - # Test if the run exists. - if not run in ds.run_names: - raise RelaxNoPipeError, run + @param element: The model component to fix or unfix. If set to 'diff', then the diffusion + parameters can be toggled. If set to 'all_spins', then all spins can be + toggled. If set to 'all', then all model components are toggled. + @type element: str. + """ + + # Test if the current data pipe exists. + if not ds.current_pipe: + raise RelaxNoPipeError + + # Alias the current data pipe. + cdp = ds[ds.current_pipe] # Diffusion tensor. - if element == 'diff': + if element == 'diff' or element == 'all': # Test if the diffusion tensor data is loaded. - if not ds.diff.has_key(run): + if not hasattr(cdp, 'diff_tensor'): raise RelaxNoTensorError, 'diffusion' # Set the fixed flag. - ds.diff[run].fixed = fixed + cdp.diff_tensor.fixed = fixed - # All residues. - elif element == 'all_res': - # Test if sequence data is loaded. - if not ds.res.has_key(run): - raise RelaxNoSequenceError, run + # All spins. + elif element == 'all_spins' or element == 'all': + # Test if sequence data exists. + if not exists_mol_res_spin_data(): + raise RelaxNoSequenceError # Loop over the sequence and set the fixed flag. - for i in xrange(len(ds.res[run])): - ds.res[run][i].fixed = fixed + for spin in spin_loop(): + # Skip deselected spins. + if not spin.select: + continue - - # All parameters. - elif element == 'all': - # Test if sequence data is loaded. - if not ds.res.has_key(run): - raise RelaxNoSequenceError, run - - # Test if the diffusion tensor data is loaded. - if not ds.diff.has_key(run): - raise RelaxNoTensorError, 'diffusion' - - # Set the fixed flag for the diffusion tensor. - ds.diff[run].fixed = fixed - - # Loop over the sequence and set the fixed flag. - for i in xrange(len(ds.res[run])): - ds.res[run][i].fixed = fixed + # Set the flag. + spin.fixed = fixed # Unknown. - else: + if element not in ['diff', 'all_spins', 'all']: raise RelaxError, "The 'element' argument " + `element` + " is unknown."