def _perform_fit(self): layer_data_item = self.viewer.data_dock.wgt_data_tree.current_item # we have to guard against all kinds of stuff that can # be throw at us by events generated by the GUI. In this # particular case, the 'current_item' item may not be the # one appropriate to provide the correct data to feed into # a fitting calculation. if not isinstance(layer_data_item, LayerDataTreeItem): return cmodel = layer_data_item.model if not type(cmodel) in all_models.values() and \ not type(cmodel.__class__) == core._CompoundModelMeta: return fitter_name = self.viewer.model_editor_dock.wgt_fit_selector.currentText() fitter = get_fitter(str(fitter_name)) init_model = layer_data_item.model x, y = layer_data_item.item.x.data, layer_data_item.item.y.data fit_model = fitter(init_model, x, y) new_y = fit_model(x) self._update_parameter_values(fit_model, layer_data_item) self._update_model_plot(layer_data_item, new_y)
def _perform_fit(self): layer_data_item = self.layer_dock.current_item if len(layer_data_item._model_items) == 0: return fitter = model_fitting.get_fitter( str(self.model_editor_dock.wgt_fit_selector.currentText())) init_model = layer_data_item.model # x, y, x_unit, y_unit = self.sub_window.graph.get_roi_data( # layer_data_item) x, y = layer_data_item.item.dispersion, layer_data_item.item.flux mask = self.sub_window.graph.get_roi_mask(layer_data_item) print(x.shape, y.shape, layer_data_item.item.dispersion.shape, layer_data_item.item.flux.shape) fit_model = fitter(init_model, x.value[~mask], y.value[~mask]) new_y = fit_model(x.value[~mask]) # Create new data object fit_spec_data = SpectrumData(new_y, unit=layer_data_item.item.unit, mask=layer_data_item.item.mask, wcs=layer_data_item.item.wcs, meta=layer_data_item.item.meta, uncertainty=layer_data_item.item.uncertainty) # Add data object to model # spec_data_item = self.model.create_data_item( # fit_spec_data, name="Model Fit ({}: {})".format( # layer_data_item.parent.text(), layer_data_item.text())) # Display # self.display_graph(spec_data_item) self.client.add_layer(fit_spec_data, mask=mask, name="Model Fit ({}: {})".format( layer_data_item.parent.text(), layer_data_item.text())) # Update using model approach for model_idx in range(layer_data_item.rowCount()): model_data_item = layer_data_item.child(model_idx) for param_idx in range(model_data_item.rowCount()): parameter_data_item = model_data_item.child(param_idx, 1) if layer_data_item.rowCount() > 1: value = fit_model[model_idx].parameters[param_idx] else: value = fit_model.parameters[param_idx] parameter_data_item.setData(value) parameter_data_item.setText(str(value))
def _perform_fit(self): layer_data_item = self.viewer.data_dock.wgt_data_tree.current_item if not isinstance(layer_data_item, LayerDataTreeItem): return fitter_name = self.viewer.model_editor_dock.wgt_fit_selector.currentText( ) fitter = get_fitter(str(fitter_name)) init_model = layer_data_item.model x, y = layer_data_item.item.x.data, layer_data_item.item.y.data fit_model = fitter(init_model, x, y) new_y = fit_model(x) # Update using model approach for model_idx in range(layer_data_item.rowCount()): model_data_item = layer_data_item.child(model_idx) for param_idx in range(model_data_item.rowCount()): parameter_data_item = model_data_item.child(param_idx, 1) if layer_data_item.rowCount() > 1: value = fit_model[model_idx].parameters[param_idx] else: value = fit_model.parameters[param_idx] parameter_data_item.setData(value) parameter_data_item.setText(str(value)) fit_spec_data = SpectrumData(x=layer_data_item.item.x) fit_spec_data.set_y(new_y, wcs=layer_data_item.item.y.wcs, unit=layer_data_item.item.y.unit) spec_data_item = self.add_data_set(fit_spec_data, name="Model Fit ({}: {})".format( layer_data_item.parent.text(), layer_data_item.text())) self.display_graph(spec_data_item)
def _perform_fit(self): layer_data_item = self.viewer.data_dock.wgt_data_tree.current_item if not isinstance(layer_data_item, LayerDataTreeItem): return fitter_name = self.viewer.model_editor_dock.wgt_fit_selector.currentText() fitter = get_fitter(str(fitter_name)) init_model = layer_data_item.model x, y = layer_data_item.item.x.data, layer_data_item.item.y.data fit_model = fitter(init_model, x, y) new_y = fit_model(x) # Update using model approach for model_idx in range(layer_data_item.rowCount()): model_data_item = layer_data_item.child(model_idx) for param_idx in range(model_data_item.rowCount()): parameter_data_item = model_data_item.child(param_idx, 1) if layer_data_item.rowCount() > 1: value = fit_model[model_idx].parameters[param_idx] else: value = fit_model.parameters[param_idx] parameter_data_item.setData(value) parameter_data_item.setText(str(value)) fit_spec_data = SpectrumData(x=layer_data_item.item.x) fit_spec_data.set_y(new_y, wcs=layer_data_item.item.y.wcs, unit=layer_data_item.item.y.unit) spec_data_item = self.add_data_set(fit_spec_data, name="Model Fit ({}: {})".format( layer_data_item.parent.text(), layer_data_item.text())) self.display_graph(spec_data_item)