def get_param_names(self, model_info=None): """Return a vector of parameter names. @keyword model_info: The spin container and the spin ID string from the _model_loop_spin() method. @type model_info: SpinContainer instance, str @return: The vector of parameter names. @rtype: list of str """ # Check that the model is setup. check_model_setup() # Unpack the data. spin, spin_id = model_info # Return the parameter names. return spin.params
def overfit_deselect(self, data_check=True, verbose=True): """Deselect spins which have insufficient data to support minimisation. @keyword data_check: A flag to signal if the presence of base data is to be checked for. @type data_check: bool @keyword verbose: A flag which if True will allow printouts. @type verbose: bool """ # Print out. if verbose: print("\nOver-fit spin deselection:") # Checks. check_mol_res_spin_data() check_model_setup() # Loop over spin data. deselect_flag = False for spin, spin_id in spin_loop(return_id=True): # Skip deselected spins. if not spin.select: continue # Check if data exists. if not hasattr(spin, 'peak_intensity'): warn(RelaxDeselectWarning(spin_id, 'missing intensity data')) spin.select = False deselect_flag = True continue # Require 3 or more data points. elif len(spin.peak_intensity) < 3: warn(RelaxDeselectWarning(spin_id, 'insufficient data, 3 or more data points are required')) spin.select = False deselect_flag = True continue # Check that the number of relaxation times is complete. if len(spin.peak_intensity) != len(cdp.relax_times): raise RelaxError("The %s peak intensity points of the spin '%s' does not match the expected number of %s (the IDs %s do not match %s)." % (len(spin.peak_intensity), spin_id, len(cdp.relax_times), sorted(spin.peak_intensity.keys()), sorted(cdp.relax_times.keys()))) # Final printout. if verbose and not deselect_flag: print("No spins have been deselected.")