Author: bugman Date: Thu Jun 6 18:17:13 2013 New Revision: 19899 URL: http://svn.gna.org/viewcvs/relax?rev=19899&view=rev Log: The dispersion specific optimisation methods can now handle missing spectrometer information. Modified: branches/relax_disp/specific_analyses/relax_disp/__init__.py Modified: branches/relax_disp/specific_analyses/relax_disp/__init__.py URL: http://svn.gna.org/viewcvs/relax/branches/relax_disp/specific_analyses/relax_disp/__init__.py?rev=19899&r1=19898&r2=19899&view=diff ============================================================================== --- branches/relax_disp/specific_analyses/relax_disp/__init__.py (original) +++ branches/relax_disp/specific_analyses/relax_disp/__init__.py Thu Jun 6 18:17:13 2013 @@ -124,11 +124,18 @@ # Create a scaling matrix. scaling_matrix = assemble_scaling_matrix(spins=[spin], scaling=False) + # Number of spectrometer fields. + fields = [None] + field_count = 1 + if hasattr(cdp, 'spectrometer_frq_count'): + fields = cdp.spectrometer_frq_list + field_count = cdp.spectrometer_frq_count + # Initialise the data structures for the target function. - values, errors, missing, frqs = return_r2eff_arrays(spins=[spin], spin_ids=[spin_id], fields=cdp.spectrometer_frq_list, field_count=cdp.spectrometer_frq_count) + values, errors, missing, frqs = return_r2eff_arrays(spins=[spin], spin_ids=[spin_id], fields=fields, field_count=field_count) # Initialise the relaxation dispersion fit functions. - model = Dispersion(model=cdp.model, num_params=param_num(spins=[spin]), num_spins=1, num_frq=cdp.spectrometer_frq_count, num_disp_points=cdp.dispersion_points, values=values, errors=errors, missing=missing, frqs=frqs, cpmg_frqs=return_cpmg_frqs(ref_flag=False), spin_lock_nu1=return_spin_lock_nu1(ref_flag=False), scaling_matrix=scaling_matrix) + model = Dispersion(model=cdp.model, num_params=param_num(spins=[spin]), num_spins=1, num_frq=field_count, num_disp_points=cdp.dispersion_points, values=values, errors=errors, missing=missing, frqs=frqs, cpmg_frqs=return_cpmg_frqs(ref_flag=False), spin_lock_nu1=return_spin_lock_nu1(ref_flag=False), scaling_matrix=scaling_matrix) # Make a single function call. This will cause back calculation and the data will be stored in the class instance. model.func(param_vector) @@ -1221,13 +1228,20 @@ if hasattr(cdp, 'num_time_pts'): num_time_pts = cdp.num_time_pts + # Number of spectrometer fields. + fields = [None] + field_count = 1 + if hasattr(cdp, 'spectrometer_frqs'): + fields = cdp.spectrometer_frq_list + field_count = cdp.spectrometer_frq_count + # Loop over the spin blocks. for spin_ids in self.model_loop(): # The spin containers. spins = self._spin_ids_to_containers(spin_ids) # The R2eff/R1rho data. - values, errors, missing, frqs = return_r2eff_arrays(spins=spins, spin_ids=spin_ids, fields=cdp.spectrometer_frq_list, field_count=cdp.spectrometer_frq_count) + values, errors, missing, frqs = return_r2eff_arrays(spins=spins, spin_ids=spin_ids, fields=fields, field_count=field_count) # Create the initial parameter vector. param_vector = assemble_param_vector(spins=spins) @@ -1260,7 +1274,7 @@ print("Unconstrained grid search size: %s (constraints may decrease this size).\n" % grid_size) # Initialise the function to minimise. - model = Dispersion(model=cdp.model, num_params=param_num(spins=spins), num_spins=len(spins), num_frq=cdp.spectrometer_frq_count, num_disp_points=cdp.dispersion_points, values=values, errors=errors, missing=missing, frqs=frqs, cpmg_frqs=return_cpmg_frqs(ref_flag=False), spin_lock_nu1=return_spin_lock_nu1(ref_flag=False), scaling_matrix=scaling_matrix) + model = Dispersion(model=cdp.model, num_params=param_num(spins=spins), num_spins=len(spins), num_frq=field_count, num_disp_points=cdp.dispersion_points, values=values, errors=errors, missing=missing, frqs=frqs, cpmg_frqs=return_cpmg_frqs(ref_flag=False), spin_lock_nu1=return_spin_lock_nu1(ref_flag=False), scaling_matrix=scaling_matrix) # Grid search. if search('^[Gg]rid', min_algor):